Python正则表达式,如何匹配一个字符串n次出现
我想匹配包含单词100.00%的行,共出现3次 e、 g 所以第1行和第3行都应该匹配 然而,我下面的正则表达式似乎只与100.00%重复3次的情况相匹配。(仅匹配线3) 我想知道我应该怎么做,以配合线1以及Python正则表达式,如何匹配一个字符串n次出现,python,regex,Python,Regex,我想匹配包含单词100.00%的行,共出现3次 e、 g 所以第1行和第3行都应该匹配 然而,我下面的正则表达式似乎只与100.00%重复3次的情况相匹配。(仅匹配线3) 我想知道我应该怎么做,以配合线1以及 谢谢大家 Halemur Ali的答案比我留下的这个答案要清晰得多,这只是为了完整 符号{3}仅仅是一种快捷方式,您可以通过扩展重复序列来替换它。要匹配序列100.00%正好出现3次的行,可以使用: "^(?:(?!100\.00%).)*(?:100\.00%(?:(?!100\.00%
谢谢大家 Halemur Ali的答案比我留下的这个答案要清晰得多,这只是为了完整 符号
{3}
仅仅是一种快捷方式,您可以通过扩展重复序列来替换它。要匹配序列100.00%
正好出现3次的行,可以使用:
"^(?:(?!100\.00%).)*(?:100\.00%(?:(?!100\.00%).)*){3}$"
这使用了
可以这样理解:
行的开头^
任何字符(零或更多),直到(?:(?!100\.00%)*
序列100.00%
序列(?:100\.00%
后跟任何字符(零或更多),直到(?!100\.00%)*
序列100.00%
重复3次{3}
行尾$
注:匹配单个字符不需要括号。另一种需要更简单正则表达式的方法是查找所有匹配
100.00%
的子字符串,并测试计数是否=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]
r'(100\.00%.*{3}'
也应该做到这一点,而且可读性、简洁性和(我认为)性能都很好 它只符合底线,因为它们都是触动的。但是第1行中间有一些东西,比如空格和foo
。你现在的正则表达式不能解释这一点。这个怎么样?重新搜索('100\.00%.'100\.00%.'100\.00%.'100\.00%,字符串)@shipping这将匹配重复次数超过3次的字符串times@silel是的,它将匹配3条或更多100.00%的线。该帖子不清楚是否必须精确到100.00%的3次出现。@Shiping,很抱歉没有澄清我的问题。我想精确匹配3个发生率可能是r'(100\.00%.*.{3}'
@HaleemurAli是的,谢谢,在基数中编辑并忘记转义。这也会匹配超过3个100.00%
序列的行。就像@siel所说的。它将匹配3次以上的事件,我想精确匹配3次非常感谢您的回答!你们和Halemur Ali的回答都解决了我的问题,非常感谢你们的详细解释!
"^(?:(?!100\.00%).)*(?:100\.00%(?:(?!100\.00%).)*){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]