我正在使用非拉丁字符的字符串。我想将字符串与重复模式匹配,例如 AAB、ABB、ABAB 等。我尝试了以下代码:
import re
patternAAB = re.compile(r'b(w)1wb')
match = patternAAB.findall(rawtext)
print(match)
但是,它仅保留匹配字符串的第一个字符。我知道发生这种情况是因为第一个\w周围的捕获括号。
我试图在整个匹配块周围添加捕获括号,但 Python 给出了
error: cannot refer to an open group at position 7
我也找到了这种方法,但对我不起作用:
patternAAB = re.compile(r'b(w)1wb')
match = patternAAB.search(rawtext)
if match:
print(match.group(1))
如何匹配模式并返回整个匹配字符串?
# Ex. 哈哈笑
# string matches AAB pattern so my code returns 哈
# but not the entire string
消息:
error: cannot refer to an open group at position 7
告诉你,1
指的是周围有括号的组,因为它的左括号排在第一位。您要反向引用的组是数字 2,因此此代码有效:
import re
rawtext = 'abc 哈哈笑 def'
patternAAB = re.compile(r'b((w)2w)b')
match = patternAAB.findall(rawtext)
print(match)
match
中的每个项目都有两组:
[('哈哈笑', '哈')]
我也找到了这种方法,但对我不起作用:
你也在这里附近。您可以使用match.group(0)
来获取完整匹配项,而不仅仅是括号中的组。所以这段代码有效:
import re
rawtext = 'abc 哈哈笑 def'
patternAAB = re.compile(r'b(w)1wb')
match = patternAAB.search(rawtext)
if match:
print(match.group(0)) # 哈哈笑