Python 3.x 可选组pythonrgx

Python 3.x 可选组pythonrgx,python-3.x,Python 3.x,我在可选组中创建了(),但结果仍然没有返回任何值。 我想要实现的是有两种不同类型的字符串: 1.阿拉巴马州[编辑] 2.阿拉巴马州(部分文本)[编辑] 如果表中没有括号或字符串,我想抽象none 括号 我也不知道为什么这对可选组不起作用,我的意思是,如果括号中有,这个表达式应该被忽略,并捕获其余的组,对吗 import re string = 'Alabama[edit]' a = re.search(r'(\w+)(?:\(([\w+\s*]+)\))(\[.*\])',string).gro

我在可选组中创建了(),但结果仍然没有返回任何值。 我想要实现的是有两种不同类型的字符串:

1.阿拉巴马州[编辑] 2.阿拉巴马州(部分文本)[编辑]

如果表中没有括号或字符串,我想抽象none 括号

我也不知道为什么这对可选组不起作用,我的意思是,如果括号中有,这个表达式应该被忽略,并捕获其余的组,对吗

import re
string = 'Alabama[edit]'
a = re.search(r'(\w+)(?:\(([\w+\s*]+)\))(\[.*\])',string).group(2)
谢谢! 埃里克

这似乎有效:

(?:\(([\w+\s*]+)\))
在原始表达式中,未使用可选指示符。要使组成为可选组,请在结束后将
放在末尾
。您使用的
?:
符号表示将在结果中忽略以下组,但将始终考虑匹配。它基本上说:“匹配这个组,但我不想在结果中知道任何事情”

我想你到底想要的是:

a=re.search('(\w+)(:\([\w+\s*]+\)?(\[.\]),string.groups()

因此:

这似乎有效:

(?:\(([\w+\s*]+)\))
在原始表达式中,未使用可选指示符。要使组成为可选组,请在结束后将
放在末尾
。您使用的
?:
符号表示将在结果中忽略以下组,但将始终考虑匹配。它基本上说:“匹配这个组,但我不想在结果中知道任何事情”

我想你到底想要的是:

a=re.search('(\w+)(:\([\w+\s*]+\)?(\[.\]),string.groups()

因此:


那么你的问题到底是什么?请慢慢来,说出你想要达到的目标,你的预期结果和实际结果是什么。也请阅读以下内容:@K.Kirsz谢谢你,我已经为我的问题制作了版本,那么你的问题到底是什么?请慢慢来,说出你想要达到的目标,你的预期结果和实际结果是什么。也请阅读以下内容:@K.Kirsz谢谢,我已经为我的问题制作了版本谢谢!看起来是这样的。我在帖子中把我的问题说得更清楚了,我不知道为什么我代码中的可选组不起作用……太棒了!非常感谢K.Kirsz!我想我对无捕获组和可选组感到困惑!非常感谢。看起来是这样的。我在帖子中把我的问题说得更清楚了,我不知道为什么我代码中的可选组不起作用……太棒了!非常感谢K.Kirsz!我想我对无捕获组和可选组感到困惑!
import re
s1 = 'Alabama[edit]'
s2 = 'Alabama(test)[edit]'
print(re.search(r'(\w+)(?:\(([\w+\s*]+)\))?(\[.*\])',s1).groups())
#('Alabama', None, '[edit]')
print(re.search(r'(\w+)(?:\(([\w+\s*]+)\))?(\[.*\])',s2).groups())
#('Alabama', 'test', '[edit]')