Python正则表达式问题

时间:2013-11-07 19:22:18

标签: python regex

我正在尝试使用re模块,它将返回一堆字符,直到特定字符串跟随单个字符。重新文档似乎表明我可以使用(?!...)来实现这一目标。我正在努力解决的例子:

str_to_search = 'abababsonab, etc'
first = re.search(r'(ab)+(?!son)', str_to_search)
second = re.search(r'.+(?!son)', str_to_search)

first.group()是'abab',这正是我的目标。但是,second.group()返回整个str_to_search字符串,尽管我试图让它停在'ababa',因为随后的'b'紧跟'son'。我哪里错了?

3 个答案:

答案 0 :(得分:2)

这不是最简单的事情,但你可以捕捉到一个重复序列的“一个字符没有跟着'儿子'”。这个重复的表达式应该在非捕获组中,(?:...),所以它不会弄乱你的匹配结果。 (你最终会得到一个额外的比赛组)

试试这个:

import re

str_to_search = 'abababsonab, etc'
second = re.search(r'(?:.(?!son))+', str_to_search)
print(second.group())

输出:

ababa

请在此处查看:http://ideone.com/6DhLgN

答案 1 :(得分:1)

这应该有效:

second = re.search(r'(.(?!son))+', str_to_search)
#output: 'ababa'

答案 2 :(得分:0)

不确定你要做什么

  1. 查看string.partition

  2. “。+?是最小的匹配器,否则它是贪婪的并得到它

  3. 阅读小组(...)和小组(..)的文档,特别是在传递小组编号时