我想匹配包含单词100.00%的行,共计3次。
例如
# Instead of <%= render partial: "account", locals: { account: @buyer } %>
<%= render "account", account: @buyer %>
所以第1行和第3行都应该匹配。
然而,我的以下正则表达式似乎只与100.00%重复3次的案例相匹配。 (仅匹配第3行)
some string 100.00% foo 100.00% 100.00%
some string 99.91% foo 100.00% 99.91%
some string 100.00%100.00%100.00%
我想知道我该如何匹配第1行呢?
谢谢大家!
答案 0 :(得分:3)
Halemur Ali的回答比我为了完整而离开的回答要清晰得多。
符号{3}
仅仅是一种快捷方式,您可以随时通过扩展重复序列来替换它。要匹配序列100.00%
恰好出现3次的行,您可以使用:
"^(?:(?!100\.00%).)*(?:100\.00%(?:(?!100\.00%).)*){3}$"
可以这样阅读:
^
行开头(?:(?!100\.00%).)*
任何字符(零个或多个),直到100.00%
序列(?:100\.00%
100.00%
序列(?!100\.00%).)*
后跟任何字符(零个或多个),直到100.00%
序列{3}
重复3次$
行尾考虑一下python的re
模块文档。
注意:不需要括号来匹配单个字符。
答案 1 :(得分:2)
需要更简单正则表达式的替代方法是查找匹配100.00%
的所有子字符串,并测试count == 3。
例如
import re
p = re.compile(r'100\.00%')
texts = ['some string 100.00% foo 100.00% 100.00%',
'some string 99.91% foo 100.00% 99.91%',
'some string 100.00%100.00%100.00%']
matches = [i for i, t in enumerate(texts)
if len(re.findall(p, t)) == 3]
# matches = [0, 2]
答案 2 :(得分:0)
r'(100\.00%.*){3}'
也应该做,并且可读,简洁,并且(我认为)高效。