在Python中实现正则表达式时遇到问题
我在python中实现正则表达式模式时遇到问题。我的表达式在上运行,但在python中无法运行 这是我的表达方式:在Python中实现正则表达式时遇到问题,python,regex,Python,Regex,我在python中实现正则表达式模式时遇到问题。我的表达式在上运行,但在python中无法运行 这是我的表达方式:[abcd][(]\d+[)]|(ab)[(]\d+[)]]|(abcd)[(]\d+[)] 我想查找并返回实例a(\d+),b(\d+),c(\d+),d(\d+),ab(\d+),或abcd(\d+) 我认为它可能会起作用,因为当我的字符串中有与模式匹配的内容时,我会将[('',)]作为我的输出,而不是[] 有什么想法吗 expressions = re.findall(r"[a
[abcd][(]\d+[)]|(ab)[(]\d+[)]]|(abcd)[(]\d+[)]
我想查找并返回实例a(\d+)
,b(\d+)
,c(\d+)
,d(\d+)
,ab(\d+)
,或abcd(\d+)
我认为它可能会起作用,因为当我的字符串中有与模式匹配的内容时,我会将[('',)]
作为我的输出,而不是[]
有什么想法吗
expressions = re.findall(r"[abcd](\d+)|(ab)(\d+)|(abcd)(\d+)",line)
print(expressions)
这应该行得通。
问题是:在Python中,没有将(
放在括号中。
如果按字面意思是(d+)
中的括号,则必须使用这些\(
和\)
请注意,如果您在ab
或abcd
它们将在引用分组时列出。
只要没有必要,我就不会发表偏执论
expressions = re.findall(r"[abcd]\(\d+\)|ab\(\d+\)|abcd\(\d+\)",line)
print(expressions)
如果只想匹配a1236
,ab12
,abcd12342
,则使用
expressions = re.findall(r"[abcd]\d+|ab\d+|abcd\d+",line)
print(expressions)
然而,如果你想用重复来捕捉某些部分,就在它们周围放一些偏执
这应该行得通。
问题是:在Python中,没有将(
放在括号中。
如果按字面意思是(d+)
中的括号,则必须使用这些\(
和\)
请注意,如果您在ab
或abcd
它们将在引用分组时列出。
只要没有必要,我就不会发表偏执论
expressions = re.findall(r"[abcd]\(\d+\)|ab\(\d+\)|abcd\(\d+\)",line)
print(expressions)
如果只想匹配a1236
,ab12
,abcd12342
,则使用
expressions = re.findall(r"[abcd]\d+|ab\d+|abcd\d+",line)
print(expressions)
但是,如果你想用重复来捕捉某些部分,就要在它们周围放上偏执论。我认为你误用了
[(]
或[)]
。
而\(\d+\)
部分是冗余的。因此您可以对其进行优化:
重新导入
行='a(123)b(11)ab(35)bc(45)abcd(1234)'
表达式=re.findall(
r'(?:[abcd]| ab | abcd)\(\d+\),
(行)
打印(表达式)
输出:
['a(123)''b(11)''ab(35)''c(45)''abcd(1234)]
说明:
是非捕获组。它仅用于分组而不是捕获(?:…)
和\(
:\)
是特殊字符的转义字符,如\
或(
(匹配文字)
)(
- 我认为你误用了
[(]
或[)]
。
而\(\d+\)
部分是冗余的。因此您可以对其进行优化:
重新导入
行='a(123)b(11)ab(35)bc(45)abcd(1234)'
表达式=re.findall(
r'(?:[abcd]| ab | abcd)\(\d+\),
(行)
打印(表达式)
输出:
['a(123)''b(11)''ab(35)''c(45)''abcd(1234)]
说明:
是非捕获组。它仅用于分组而不是捕获(?:…)
和\(
:\)
是特殊字符的转义字符,如\
或(
(匹配文字)
)(
(?:…)
。将来会有用的!谢谢!什么是?:do?@usr2564301我修改了我的答案。@BoseongChoi这是一个很大的简化!@JadonErwin我附加了简短的解释:)@BoseongChoi谢谢,一个人总是能学到一些新东西-忘记非捕获组(?:…)
。将来会有用的!