我正在尝试使用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'。我哪里错了?
答案 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)
不确定你要做什么
查看string.partition
“。+?是最小的匹配器,否则它是贪婪的并得到它
阅读小组(...)和小组(..)的文档,特别是在传递小组编号时