首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python用于标识行首两个连续大写单词

Python用于标识行首两个连续大写单词
EN

Stack Overflow用户
提问于 2020-04-13 16:15:47
回答 3查看 104关注 0票数 0

我有一段文本,我想从其中移除每一个名字,"Remggrehte Sertrro“和"Perrhhfson Forrtdd”。我尝试应用这个regex:([A-Z][a-z]+(?=\s[A-Z])(?:\s[A-Z][a-z]+)+),但是它识别了"Remggrehte“、"Perrhhfson”和文本中的"Mash“。基本上,我希望它只在行的开头识别前两个大写单词,而不触及其余的。我不是regex专家,我不知道如何调整它。

案文如下:

雷姆格列

雷姆格丽特·塞尔特罗我们多年来确实希望每周工作4天。

弗尔特德

Perrhhfson如果鼓点没有得到足够的测试和PPE齿轮,经济Mash Mush将继续。

提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-04-13 16:36:01

你不需要积极的展望来匹配前两个大写单词。

在您的模式中,这个部分(?=\s[A-Z])可以省略,因为您首先断言它,然后直接匹配它。

您可以在没有捕获组的情况下匹配前两个单词,并在右边断言一个空白边界(?!\S)

代码语言:javascript
复制
^[A-Z][a-z]+[^\S\r\n][A-Z][a-z]+(?!\S)

解释

  • 字符串的^开始
  • [A-Z][a-z]+匹配一个字符and和1+小写字符and
  • [^\S\r\n]匹配除换行符以外的空白字符,因为\s也可以匹配换行符,您希望在行的开头匹配两个连续的大写单词。
  • [A-Z][a-z]+匹配一个字符and和1+小写字符and
  • (?!\S)在右边断言一个空白边界

Regex演示

注意到[A-Z][a-z]+只匹配字符a。要匹配单词字符,可以使用\w而不是[a-z]

票数 0
EN

Stack Overflow用户

发布于 2020-04-13 16:27:24

您可以使用此模式/^([A-Z]+.*? ){2}/m,如果您始终确定只得到的两个术语(大写首字母),而总是在前两个术语()内嵌。使用regex101.com的示例

票数 1
EN

Stack Overflow用户

发布于 2020-04-13 16:25:30

您可以删除只包含使用re.MULTILINE标志的名称的行和下面的regex:r"^(?:[A-Z]\w+\s+[A-Z]\w+\s+)$"。只有在没有额外文本的情况下,这个正则表达式才会匹配每个名称。

下面是一个演示:

代码语言:javascript
复制
import re

text = """\
Remggrehte Sertrro

Remggrehte Sertrro We did want a 4-day work week for years.

Perrhhfson Forrtdd

Perrhhfson Forrtdd If drumph does n't get sufficient testing and PPE gear , the economy Mash Mush will continue to.
"""

print(re.sub(r"^(?:[A-Z]\w+\s+[A-Z]\w+\s+)$", "", text, flags=re.MULTILINE))

你得到:

代码语言:javascript
复制
Remggrehte Sertrro We did want a 4-day work week for years.


Perrhhfson Forrtdd If drumph does n't get sufficient testing and PPE gear , the economy Mash Mush will continue to.
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61192064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档