Python正则表达式来获取所有内容,直到字符串中的第一个点如何实现?

  • 回答 (2)
  • 关注 (0)
  • 查看 (260)
find = re.compile("^(.*)\..*")
for l in lines:
    m = re.match(find, l)
    print m.group(1) 

我想把字符串中的任何东西都重复直到第一个点。

a@b.c,我想a@ba@b.c.d,我想a@ba@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?

1个老爷们1个老爷们提问于
好好看解密右转天后不带记忆与方向生活回答于
已采纳

默认情况下,所有量词本质上都是贪婪的。从某种意义上说,他们会尝试尽可能多地使用字符串。你可以通过?在他们之后追加一个来让他们不愿意:

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)

演示

区城轩回答于

.find()在这种情况下,可以使用而不是正则表达式:

>>> s = "a@b.c"
>>> print(s[0:s.find('.')])
a@b

考虑到这些注释,下面是一些修改.index()(它类似于.find()除了当没有匹配的字符串而不是-1时它返回一个错误):

>>> s = "a@b.c"
>>> try:
...     index = s.index('.')
... except ValueError:
...     index = len(s)
...
>>> print(s[:index])
a@b

扫码关注云+社区

领取腾讯云代金券