Python 用于在多行字符串变量中搜索子字符串的正则表达式

Python regex to search substring in multiline string variable

我正在尝试在多行字符串变量中搜索词组。我可以通过

>>> test_1 = """--Comment
... /*Comment*/
... MERGE fhkjfsk lkfjs;lfks;f
... hdkjdkd
... fjlkf
... """
>>> m = re.search(r"(insert|merge|update|delete)\s*", test_1, re.IGNORECASE)
>>> print(m)
<_sre.SRE_Match object; span=(22, 28), match='MERGE '>

但我只想匹配那些出现在不以“--”或“/*”开头的行中的单词。所以我不想跟随匹配:

>>> test_1 = """--Comment
... /*Comment*/
... --MERGE fhkjfsk lkfjs;lfks;f
... hdkjdkd
... fjlkf
... """
>>> m = re.search(r"(insert|merge|update|delete)\s*", test_1, re.IGNORECASE)
>>> print(m)
<_sre.SRE_Match object; span=(24, 30), match='MERGE '>

这就是我无法开始工作的原因。我试过:

>>> test_1 = """--Comment
... /*Comment*/
... --MERGE fhkjfsk lkfjs;lfks;f
... INSERT fhskjfsf
... gfdsjhs
... """
>>> m = re.search(r"^(?!--)(insert|merge|update|delete)\s*", test_1, re.IGNORECASE)
>>> print(m)
None
>>>

我想我需要在两个括号之间添加一些内容 (?!--)(insert|merge|update|delete) 并尝试添加

.+ 喜欢 (?!--).+(insert|merge|update|delete)

\s* 喜欢 (?!--)\s*(insert|merge|update|delete)

。喜欢 (?!--).(insert|merge|update|delete)

.* 喜欢 (?!--).*(insert|merge|update|delete) 但没有用。

任何关于如何使这项工作的建议将不胜感激。

正则表达式很好,但是 ^ 只匹配整个字符串的开头。您应该使用 re.MULTILINE 使其匹配行的开头。

re.search(r"^(?!--)(insert|merge|update|delete)\s*", test_1, re.IGNORECASE | re.MULTILINE)