我有一段文本,我想从其中移除每一个名字,"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将继续。
提前谢谢。
发布于 2020-04-13 16:36:01
你不需要积极的展望来匹配前两个大写单词。
在您的模式中,这个部分(?=\s[A-Z])可以省略,因为您首先断言它,然后直接匹配它。
您可以在没有捕获组的情况下匹配前两个单词,并在右边断言一个空白边界(?!\S)。
^[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)在右边断言一个空白边界注意到,[A-Z][a-z]+只匹配字符a。要匹配单词字符,可以使用\w而不是[a-z]。
发布于 2020-04-13 16:27:24
您可以使用此模式/^([A-Z]+.*? ){2}/m,如果您始终确定只得到的两个术语(大写首字母),而总是在前两个术语()内嵌。使用regex101.com的示例
发布于 2020-04-13 16:25:30
您可以删除只包含使用re.MULTILINE标志的名称的行和下面的regex:r"^(?:[A-Z]\w+\s+[A-Z]\w+\s+)$"。只有在没有额外文本的情况下,这个正则表达式才会匹配每个名称。
下面是一个演示:
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))你得到:
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.https://stackoverflow.com/questions/61192064
复制相似问题