Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式-忽略括号作为索引?_Python_Regex_Findall - Fatal编程技术网

Python正则表达式-忽略括号作为索引?

Python正则表达式-忽略括号作为索引?,python,regex,findall,Python,Regex,Findall,我目前编写了一个nooby正则表达式模式,其中涉及到过度使用“(“and”)”字符,但我将它们用于“or”运算符,例如(a | B | C)表示a或B或C 我需要在字符串中找到模式的每个匹配项。 尝试使用re.findall(pattern,text)方法是不好的,因为它将括号字符解释为索引符号(或任何正确的术语),因此生成的列表的每个元素都不是显示匹配文本节的字符串,而是元组(其中包含非常难看的模式匹配片段). 是否有一个参数可以传递给findall忽略作为索引的偏执? 或者我必须使用非常

我目前编写了一个nooby正则表达式模式,其中涉及到过度使用“(“and”)”字符,但我将它们用于“or”运算符,例如(a | B | C)表示a或B或C

我需要在字符串中找到模式的每个匹配项。
尝试使用
re.findall(pattern,text)
方法是不好的,因为它将括号字符解释为索引符号(或任何正确的术语),因此生成的列表的每个元素都不是显示匹配文本节的字符串,而是元组(其中包含非常难看的模式匹配片段).

是否有一个参数可以传递给
findall
忽略作为索引的偏执?
或者我必须使用非常丑陋的组合
re.search
,和
re.sub

(这是我能想到的唯一解决方案;找到re.search的索引,将匹配的文本部分添加到列表中,然后从原始字符串中删除它{使用丑陋的索引技巧},继续这样做直到没有更多的匹配。显然,这是可怕和不可取的)


谢谢

是,将
?:
添加到组以使其不捕获

import re
print re.findall('(.(foo))', "Xfoo")   # [('Xfoo', 'foo')]
print re.findall('(.(?:foo))', "Xfoo") # ['Xfoo']
有关更多信息,请参阅

re.findall(r"(?:A|B|C)D", "BDE")


你能给我们看一下你想匹配/捕获什么和不匹配什么吗?也许你的regexp可以改进=)例如,
re.findall(r“(A | B | C)D”,“BDE”)
返回['B'],而不是括号内的['AD']?例如,“(?:A | B | C)”?@AntiEarth:是的,请参见示例威尔转义括号导致索引?例如:r“\(这在方括号中)\”一个无换位符的括号有一个特殊的含义(字符类中除外)。转义括号是表示需要实际括号字符的一种方式。
re.findall(r"((?:A|B|C)D)", "BDE")