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
应该找到什么以便它只得到 a@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)
关于Python正则表达式获取所有内容,直到字符串中的第一个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19142042/