2024-10-03 09:09:58 发布
网友
简短的问题:
我有一根绳子:
title="Announcing Elasticsearch.js For Node.js And The Browser"
我想找到所有的单词对,每个单词都是大写的。在
因此,预期产出应为:
我现在拥有的是:
'[A-Z][a-z]+[\s-][A-Z][a-z.]*'
这给了我一个输出:
['Announcing Elasticsearch.js', 'For Node.js', 'And The']
如何更改正则表达式以提供所需的输出?在
可能有更有效的方法来实现这一点,但您可以使用如下正则表达式:
(\b[A-Z][a-z.-]+\b)
然后迭代捕获组,比如使用以下regex:(^[A-Z][a-z.-]+$)进行测试,以确保匹配的组(current)与匹配的组(next)匹配。在
(^[A-Z][a-z.-]+$)
工作示例:
[ ['Browser', 'Announcing'], ['Announcing', 'Elasticsearch.js'], ['Elasticsearch.js', 'For'], ['For', 'Node.js'], ['Node.js', 'And'], ['And', 'The'], ['The', 'Browser'] ]
您可以使用这个:
#!/usr/bin/python import re title="Announcing Elasticsearch.js For Node.js And The Browser TEst" pattern = r'(?=((?<![A-Za-z.])[A-Z][a-z.]*[\s-][A-Z][a-z.]*))' print re.findall(pattern, title)
“普通”模式不能匹配重叠的子字符串,所有字符都是一次性创建的。然而,lookahead (?=..)(即“后跟”)只是一个检查,什么都不匹配。它可以多次解析字符串。因此,如果在lookahead中放置一个捕获组,就可以获得重叠的子字符串。在
(?=..)
如果你现在的Python代码是
title="Announcing Elasticsearch.js For Node.js And The Browser" results = re.findall("[A-Z][a-z]+[\s-][A-Z][a-z.]*", title)
然后你的程序跳过奇数对。一个简单的解决方法是在跳过第一个单词后研究模式,如下所示:
现在把结果和结果2结合起来。在
可能有更有效的方法来实现这一点,但您可以使用如下正则表达式:
然后迭代捕获组,比如使用以下regex:
(^[A-Z][a-z.-]+$)
进行测试,以确保匹配的组(current)与匹配的组(next)匹配。在工作示例:
^{pr2}$您可以使用这个:
“普通”模式不能匹配重叠的子字符串,所有字符都是一次性创建的。然而,lookahead
(?=..)
(即“后跟”)只是一个检查,什么都不匹配。它可以多次解析字符串。因此,如果在lookahead中放置一个捕获组,就可以获得重叠的子字符串。在如果你现在的Python代码是
然后你的程序跳过奇数对。一个简单的解决方法是在跳过第一个单词后研究模式,如下所示:
^{pr2}$现在把结果和结果2结合起来。在
相关问题 更多 >
编程相关推荐