Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.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 - Fatal编程技术网

在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

我在python中实现正则表达式模式时遇到问题。我的表达式在上运行,但在python中无法运行

这是我的表达方式:
[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)]
      
      说明:

      • (?:…)
        是非捕获组。它仅用于分组而不是捕获
      • \(
        \)
        \
        是特殊字符的转义字符,如
        (匹配文字

      编辑问题以显示一个或多个分配到“行”、输出和预期输出的示例。编辑问题以显示一个或多个分配到“行”、输出和预期输出的示例。我指的是d+是我意识到的任何整数。:)我指的是d+是我意识到的任何整数。)谢谢!什么是?:做?@usr2564301我修改了我的答案。@BoseongChoi这太简单了!@JadonErwin我附加了简短的解释:)@BoseongChoi谢谢,人们总是能学到一些新东西-忘记了非捕获组
      (?:…)
      。将来会有用的!谢谢!什么是?:do?@usr2564301我修改了我的答案。@BoseongChoi这是一个很大的简化!@JadonErwin我附加了简短的解释:)@BoseongChoi谢谢,一个人总是能学到一些新东西-忘记非捕获组
      (?:…)
      。将来会有用的!