正则表达式仅以 value1 开头,没有 value1\nvalue2

regex only start with value1 without value1\nvalue2

正则表达式中的新功能,尝试在服务器上捕获字符串仅以 value1 开头的文件,但如果我们在文件 value1 和下一个字符串 value2 中有,我们不会将其添加到输出中

keyword = re.findall(r'^process.args=spring.*?xml(?!process.script=true)', line,re.S)

有什么建议吗?

需要这样的输出:

xxxx xxx xxx xxx
process.args=spring.xxxx.xml
process.script=true
xxxx xxx xxx xxx\n```

output after regex : None

and 

```xx xx xxx xxx xxx
xxxx xxx xxx xxx
process.args=spring.xxxx.xml
xxxx xxx xxx xxx```

output after regex : process.args=spring.xxxx.xml

在您的模式中,您在 xml 之后立即使用否定前瞻 xml(?!process。但由于它位于字符串的末尾,您可以在 \r?\nprocess

之前添加匹配换行符

请注意,如果 .xml 在字符串的末尾,则不必使点不贪心,并且必须转义点以按字面匹配它。

您还可以在 true 之后添加一个单词边界,以确保它不是较长单词的一部分。

^process\.args=spring.*\.xml(?!\r?\nprocess\.script=true\b)

Regex demo | Python demo

例如

import re

regex = r"^process\.args=spring.*\.xml(?!\r?\nprocess\.script=true\b)"

line = ("xxxx xxx xxx xxx\n"
    "process.args=spring.xxxx.xml\n"
    "process.script=true\n"
    "xxxx xxx xxx xxx\n\n\n"
    "xx xx xxx xxx xxx\n"
    "xxxx xxx xxx xxx\n"
    "process.args=spring.xxxx.xml\n"
    "xxxx xxx xxx xxx")

res = re.findall(regex, line, re.MULTILINE)
print(res)

输出

['process.args=spring.xxxx.xml']