- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有这个(简化的)正则表达式:
((\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"..."
作为正则表达式。
关于python - 正则表达式:python 其他结果作为 regexr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43849904/
下面是我的代码。 var input = "this is @renish profile"; var matches = input.replace(/(@\w*)/g,'$1'); 输出为: th
我正在尝试编写一个匹配多项式因子的正则表达式。它必须是真或假。它要么匹配,要么不匹配。例如: (x-5)(x+2)(x-1) 当然这三个因素的顺序可以任意,但不能重复。我可以重复,但大多数时候我不能。
我需要为下面的字符串模式生成一个正则表达式。 A:B:C:D A 应该只包含字符串,B 可以包含字符串和数字,C 应该是字符串,D 应该只是数字。 我自己创建了 RegExr 及其工作原理。 [a-z
我的字符串中列出了年份 $s = "Acquired by the University in 1988"; 实际上,它可以在这个单行字符串中的任何位置。如何使用正则表达式提取它?我尝试了\d 但这没
我因使用\(bakcslash) 进行 regExr 匹配而出现超出范围错误.. ..请解决......!! if ($('.channelquickvalidte').val().match("^
这个问题在这里已经有了答案: ReactJS convert HTML string to JSX (12 个答案) How to render HTML string as real HTML?
我有这个(简化的)正则表达式: ((\s(python|java)\s)?((\S+\s+and\s))?(\S+\s+(love|hate))) 我在regexr中创建了这个环境并在这句话上进行了测
我正在使用这个工具 http://regexr.com/3fvg9我想在 regexxr 工具中标记这个(weat)her。 (weath)er is good. // i want
我需要使用正则表达式来解决两个问题来定位文件路径。 1) 主要问题:我收到一条我不明白的错误消息。2)在我更改一些小内容之前,脚本会运行,但正则表达式搜索没有返回任何内容。 在 regexr.com
我想要一个文本的正则表达式,如果里面至少有 1 个单词和 2 个字母,并且至少有 25 个字母或数字,并且还允许 (0-9äöü,.' -),如果那里有其他字母或数字,应该报错。 例子: 正确: 李四
我有这个正则表达式,我用它来将一个字符串拆分成我可以稍后处理的标记。我使用 RegExr(在线工具)制作它并且在那里工作正常,但我无法让它在 python 中工作。我现在正在使用它来打印火柴。 sun
我想知道是否有一个 Xpath 相当于 http://gskinner.com/RegExr/用于正则表达式? 通过这种方式,您只需键入一个 xpath 查询,它就会显示您选择了哪些元素。 我还没有找
我有一个正则表达式,用于从 CocoaPods 定义中提取 git URL。 输入文字如下: pod 'Alamofire', :git => 'https://github.com/Alamofir
我是一名优秀的程序员,十分优秀!