如何返回与重叠模式(如AAB或ABB)匹配的整个非拉丁字符串

2024-10-01 07:51:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理非拉丁字符的字符串。 我想用重叠模式匹配字符串,如AAB、ABB、ABAB等。 我尝试了以下代码:

import re

patternAAB = re.compile(r'\b(\w)\1\w\b')
match = patternAAB.findall(rawtext)
print(match) 

但是,它只返回匹配字符串的第一个字符。 我知道之所以会发生这种情况,是因为在第一个\w的周围有一个括号

我试图在整个匹配块周围添加捕获括号,但Python给出了

error: cannot refer to an open group at position 7

我也发现了这种方法,但对我来说不起作用:

patternAAB = re.compile(r'\b(\w)\1\w\b')
match = patternAAB.search(rawtext)
if match:
    print(match.group(1))

如何匹配模式并返回整个匹配字符串

# Ex. 哈哈笑 
# string matches AAB pattern so my code returns 哈 
# but not the entire string

Tags: 字符串代码restringmatchgroup字符括号
2条回答

信息:

error: cannot refer to an open group at position 7

正在告诉您\1指的是四周都有括号的组,因为它的左括号在前面。要反向引用的组的编号为2,因此此代码有效:

import re

rawtext = 'abc 哈哈笑 def'

patternAAB = re.compile(r'\b((\w)\2\w)\b')
match = patternAAB.findall(rawtext)
print(match)

match中的每个项目都有两个组:

[('哈哈笑', '哈')]

I also found this method, but didn't work for me:

你在这里也很近。您可以使用match.group(0)获得完全匹配,而不仅仅是括号中的组。因此,该代码起作用:

import re

rawtext = 'abc 哈哈笑 def'

patternAAB = re.compile(r'\b(\w)\1\w\b')
match = patternAAB.search(rawtext)
if match:
    print(match.group(0))   # 哈哈笑

相关问题 更多 >