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的re.search匹配以下模式: ((不是开括号,然后是1-3个空格)或(字符串的开头))然后(字符1或E)然后(任意数量的空格)然后(闭括号) 以下是我到目前为止的情况: re.search(r'((^\(\s{1,3})|^)[1tE]\s+\)', text) 要匹配示例吗 text = " E )" text = "1 )" 不想匹配的例子 text = "( 1 ) 考虑以下模式: ( (不是开括号,

我想使用python的
re.search
匹配以下模式:

((不是开括号,然后是1-3个空格)或(字符串的开头))然后(字符1或E)然后(任意数量的空格)然后(闭括号)

以下是我到目前为止的情况:

re.search(r'((^\(\s{1,3})|^)[1tE]\s+\)', text)
要匹配示例吗

text = "  E  )"
text = "1 )"
不想匹配的例子

text = "( 1 )

考虑以下模式:

    • (不是开括号,然后是1-3个空格)
      -
      [^(]\s{1,3}
    • -
      |
    • (字符串的开头)
      -
      ^
  • (字符1或E)
    -
    [1E]
  • (任意数量的空格)
    -
    \s*
  • (右括号)
    -
    \)
将所有这些合并为一个模式:

(?:[^(]\s{1,3}|^)[1E]\s*\)
要匹配整个字符串,请添加锚定、
^
$

^(?:[^(]\s{1,3}|^[1E]\s*\)$

(?:…)
是非捕获组,如果将来需要访问其值,请使用捕获组

您可以使用详细的正则表达式表示法使其更具可读性和可维护性:

re.search(
r”“”
(?:
[^(]\s{1,3}#不是开括号,然后是1-3个空格
|#或
^#字符串的开头
)
[1E]#字符1或E
\s*#任意数量的空格
\)#关闭支架
""",
文本,
重复冗长
)

你说“非开括号”,但使用了与其匹配的
\(
,为什么?尝试
re.search(r'^(?[^(]\s{1,3})?[1tE]\s+\),text)
,请参见。这是否也匹配?
%E)
嗨,我的解决方案对你有用吗?