猿问

如果字符串有 X 个以@#$ 开头的单词,则 Python 正则表达式匹配:

我想要做的是匹配字符串,如果该字符串包含 X 数量(比方说 5)以 @#$: 字符开头的单词。


假设 X 为 5 的示例:


@someword someotherword anotherword word1 word2 word3 => false

@someword :someotherword #anotherword $word1 word2 word3 => false

@someword :someotherword #anotherword $word1 #word2 $word3 => true


墨色风雨
浏览 255回答 3
3回答

天涯尽头无女友

假设这些符号仅在单词字符之前使用,您可以使用此正则表达式:(?:]\B[@#$:]\w+[^@#$:]*){5}正则表达式演示代码:>>> arr = ['@someword someotherword anotherword word1 word2 word3', '@someword :someotherword #anotherword $word1 word2 word3','@someword :someotherword #anotherword $word1 #word2 $word3']>>> reg = re.compile(r'(?:\B[@#$:]\w+[^@#$:\n]*){5}');>>> for i in arr:...     print(reg.findall(i))...[][]['@someword :someotherword #anotherword $word1 #word2 ']\B:\b不匹配的地方。[@#$:]\w+: 匹配 1+ 个以开头的单词字符 [@#$:][^@#$:]*: 匹配 0 个或多个不包含的字符 [@#$:](...){5}: 在当前输入中匹配 5 个

凤凰求蛊

积极的前瞻将是做到这一点的一种方法:input = "@someword :someotherword #anotherword $word1 #word2 $word3"result = re.match(r'.*((?<=\s)|(?<=^))[@#$:]\S+.*(\s[@#$:]\S+.*){4}', input)if result:&nbsp; &nbsp; print("Found a match")这个问题很棘手,因为你想用 start a special symbol 匹配单词[@#$:]。但是,我们不能只使用单词边界\b,因为特殊字符不是单词字符。因此,相反,我们可以检查目标术语开头之前的内容是空格还是字符串的开头。

慕雪6442864

正确的正则表达式是((?:[@#$].+){5}). 正则表达式解释例子:import re...tst = """&nbsp; &nbsp; @someword someotherword anotherword word1 word2 word3&nbsp; &nbsp; @someword :someotherword #anotherword $word4 #word5 $word6&nbsp; &nbsp; @someword :someotherword #anotherword $word1 word2 word3&nbsp; &nbsp; @someword :someotherword #anotherword $word1 #word2 $word3"""res = re.findall(r"((?:[@#$].+){5})", tst)print(res)结果:['@someword :someotherword #anotherword $word4 #word5 $word6', '@someword :someotherword #anotherword $word1 #word2 $word3']分享
随时随地看视频慕课网APP

相关分类

Python
我要回答