gpt4 book ai didi

python - 正则表达式:python 其他结果作为 regexr

转载 作者:太空宇宙 更新时间:2023-11-03 15:16:30 26 4
gpt4 key购买 nike

我有这个(简化的)正则表达式:

((\s(python|java)\s)?((\S+\s+and\s))?(\S+\s+(love|hate)))

我在regexr中创建了这个环境并在这句话上进行了测试:

python and java love python love python and java java

哪些匹配:

python 和 java 的爱情 python 的爱情 python 和 java java

这正是我想要的。所以我在 python 中实现了这个:

import re
regex = re.compile("((\s(python|java)\s)?((\S+\s+and\s))?(\S+\s+(love|hate)))")
string = "python and java love python love python and java java"
print(str(re.findall(regex,string)))

但是这会给出:

[('python and java love', '', '', 'python and ', 'python and ', 'java love', 'love'), ('python love', '', '', '', '', 'python love', 'love')]


是什么导致了这种差异以及如何解决这个问题?

<小时/>

更新1
使用原始字符串也不起作用:

import re
regex = re.compile(r'((\s(python|java)\s)?((\S+\s+and\s))?(\S+\s+(love|hate)))')
string = "python and java love python love python and java java"
print(str(re.findall(regex,string)))

这仍然会给出:

[('python and java love', '', '', 'python and ', 'python and ', 'java love', 'love'), ('python love', '', '', '', '', 'python love', 'love')]
<小时/>

更新2
我将使用我的其他正则表达式(其他术语),因为我可以准确地说出我想要匹配的内容和不匹配的内容:

"(?:\s(?:low|high)\s)?(?:\S+\s+and\s)?(\S+\s+stress|deficiency|limiting)"

应该匹配什么:

low|high ANY_WORD stress|deficiency|limiting
ANY_WORD stress|deficiency|limiting
ANY_WORD and ANY_WORD stress|deficiency|limiting
ANY_WORD and ANY_WORD ANY_WORD stress|deficiency|limiting
(for the last one only allow two words after and if stress,deficiency or limiting is behind it

不应该匹配的内容:

stress|deficiency|limiting (so don't match these if nothing is in front of them)
low
high
ANY_WORD
ANY_WORD and ANY_WORD

示例列表:

匹配:

salt and water stress
photo-oxidative stress
salinity and high light stress
low-temperature stress
Cd stress
Cu deficiency
N deficiency
IMI stress

没有匹配:

stress
deficiency
limiting
temperature and water
low
high
water and salt

最佳答案

您的正则表达式有许多不必要的捕获组,这些捕获组正在影响 findall 的输出。

您可以将正则表达式转换为此并使其工作:

>>> regex = re.compile(r"(?:\s(?:low|high)\s)?(?:\S+\s+and\s)?\S+[ \t]+(?:stress|deficiency|limiting)")
>>> print re.findall(regex, string)

顺便说一句,这也可以在没有原始字符串模式的情况下工作,尽管建议使用 r"..." 作为正则表达式。

RegEx Demo

关于python - 正则表达式:python 其他结果作为 regexr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43849904/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com