find = re.compile("^(.*)\..*")
for l in lines:
m = re.match(find, l)
print m.group(1)
我想把字符串中的任何东西都重复直到第一个点。
在a@b.c
,我想a@b
在a@b.c.d
,我想a@b
在a@b.c.d.e
,我想a@b
我的代码给了我
a@b.c
版画 a@b
a@b.c.d
版画 a@b.c
a@b.c.d.e
版画 a@b.c.d
应该找到什么才能得到@ b?
默认情况下,所有量词本质上都是贪婪的。从某种意义上说,他们会尝试尽可能多地使用字符串。你可以通过?
在他们之后追加一个来让他们不愿意:
find = re.compile(r"^(.*?)\..*")
正如评论中指出的那样,如果字符串中没有句点,这种方法会失败。所以,这取决于你想如何表现。但是如果你想在这种情况下得到完整的字符串,那么你可以使用否定的字符类:
find = re.compile(r"^([^.]*).*")
它会在遇到第一个周期后或在字符串末尾自动停止。
你也不想使用re.match()
那里。re.search()
应该很好。可以将代码修改为:
find = re.compile(r"^[^.]*")
for l in lines:
print re.search(find, l).group(0)