pythonregex:匹配所有连续的大写单词

2024-10-03 09:09:58 发布

您现在位置:Python中文网/ 问答频道 /正文

简短的问题:

我有一根绳子:

title="Announcing Elasticsearch.js For Node.js And The Browser"

我想找到所有的单词对,每个单词都是大写的。在

因此,预期产出应为:

^{pr2}$

我现在拥有的是:

'[A-Z][a-z]+[\s-][A-Z][a-z.]*'

这给了我一个输出:

['Announcing Elasticsearch.js', 'For Node.js', 'And The']

如何更改正则表达式以提供所需的输出?在


Tags: andthebrowsernodefortitlejselasticsearch
3条回答

可能有更有效的方法来实现这一点,但您可以使用如下正则表达式:

(\b[A-Z][a-z.-]+\b)

然后迭代捕获组,比如使用以下regex:(^[A-Z][a-z.-]+$)进行测试,以确保匹配的组(current)与匹配的组(next)匹配。在

工作示例:

^{pr2}$

[
    ['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)

然后你的程序跳过奇数对。一个简单的解决方法是在跳过第一个单词后研究模式,如下所示:

^{pr2}$

现在把结果和结果2结合起来。在

相关问题 更多 >