簡體   English   中英

如何使用正則表達式提取第二個大寫字母后的所有文本(數字、字母、符號)?

[英]How do I extract with regex all the text (numbers, letters, symbols) after the second capital letter?

They won.             Elles gagnèrent.
They won.    Ils ont gagné.
They won.        Elles ont gagné.
Tom came.    Tom est venu.
Tom died.       Tom est mort.
Tom knew. Tom savait.
Tom left.    Tom est parti.
Tom left.       Tom partit.
Tom lied. Tom a menti.
Tom lies.    Tom ment.
Tom lost.            Tom a perdu.
Tom paid.    Tom a payé.

我在將提取第二個大寫字母(包括它)之后的所有文本的正則表達式模式放在一起時遇到了一些麻煩。

例如:

They won.             Elles gagnèrent.

在這種情況下,您應該提取:

Elles gagnèrent.

這是我的代碼,但效果不佳:

import re

line = "They won.             Elles gagnèrent." #for example this case

match = re.search(r"\s¿?(?:A|Á|B|C|D|E|É|F|G|H|I|Í|J|K|LL|L|M|N|Ñ|O|Ó|P|Q|R|S|T|U|Ú|V|W|X|Y|Z)\s((?:\w\s)+)?" , line)

n_sense = match.group()

print(repr(n_sense)) #should print "Elles gagnèrent."

您可以嘗試以下代碼。

with open(file, "r") as r:
    for line in r:
        line = re.sub('^[^A-Z]*[A-Z][^A-Z]*','', line)
        print(line, end="")

這是正則表達式: [^AZ]*[AZ][^AZ]*[AZ]([^\n]+)

括號把你想要的文字包裹起來,這叫做group。 您將在 python 中輕松了解它及其工作原理。

但更好的是提供一個工具https://regex101.com/

您可以按照描述搜索匹配項:

[A-Z].*?([A-Z].*)

這是一個大寫字母,后跟零個或多個任何內容,然后是另一個大寫字母,然后是任何內容,捕獲最后一組:

import unicodedata
import re

s = '''They won.             Elles gagnèrent.
They won.    Ils ont gagné.
They won.        Elles ont gagné.
Tom came.    Tom est venu.
Tom died.       Tom est mort.
Tom knew. Tom savait.
Tom left.    Tom est parti.
Tom left.       Tom partit.
Tom lied. Tom a menti.
Tom lies.    Tom ment.
Âom lost.            Étienne a perdu.  # << note accents
Tom paid.    Tom a payé.'''


s = unicodedata.normalize('NFD', s)
re.findall(r'[A-Z].*?([A-Z].*)', s, re.UNICODE)

這會給你:

['Elles gagnèrent.',
 'Ils ont gagné.',
 'Elles ont gagné.',
 'Tom est venu.',
 'Tom est mort.',
 'Tom savait.',
 'Tom est parti.',
 'Tom partit.',
 'Tom a menti.',
 'Tom ment.',
 'Étienne a perdu.',
 'Tom a payé.']

如果所有這些空格都是實際文本的一部分,則可能更容易匹配或拆分這些空格。 re.UNICODE標志將允許它匹配帶有重音符號的大寫字母,例如Étienne ,但您需要確保首先對 unicode 進行標准化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM