我想使用正則運算式計算句子中人稱代詞的數量,例如I, we, my, oursand us。我希望它忽略它, US因為它可能是一個國家/地區的名稱。
我的代碼如下
import re
pronounRegex = re.compile(r'I|we|my|ours|us',re.I)
pronouns = pronounRegex.findall(' I me you We and all of us make this team tweek, he is from US')
print(pronouns)
哪個列印
['I', 'We', 'us', 'i', 'we', 'i', 'US']
它從“this”中讀取“i”,從“tweek”中讀取“we”。我不確定如何忽略這些情況。
uj5u.com熱心網友回復:
為了防止re匹配單詞this, tweek,您可以使用單詞邊界。添加\b到運算子之間的每個正則運算式專案的前面和后面,|
像這樣,
r'\bI\b|\bwe\b|\bmy\b|\bours\b|\bus\b'
現在,為了防止匹配,US您需要明確指定動詞的可能形式。例如,代詞we可以寫成Weorwe本身,但不能寫成wE。
所以,像這樣重新制作你的正則運算式,
pronounRegex = re.compile(r'\bI\b|\bwe\b|\bWe\b|\bmy\b|\bMy\b|\bours\b|\bus\b')
pronounRegex.findall(' I me you We and all of us make this team tweek, he is from US')
請注意,代詞oursandus沒有以大寫形式提供。因為這些代詞永遠不能出現在句子的開頭(即所有格形式)。
uj5u.com熱心網友回復:
您匹配US是因為您的正則運算式有us替代方法,并且該re.I標志啟用不區分大小寫的搜索。
您會在單詞中得到部分匹配,因為您的正則運算式是背景關系不感知的,而不是以任何方式“錨定”的。如果您需要匹配單詞,請使用單詞邊界。但是,您不需要將它們與每個替代項一起放置,您可以使用分組結構并\b僅放置在組的兩端。
您可以使用
pronounRegex = re.compile(r'\b(I|we|my|ours|(?-i:us))\b',re.I)
詳情:
\b- 一個單詞邊界(緊靠左邊,可以是字串位置的開始,也可以是非單詞字符)(- 開始一個 ID 為 1 的捕獲組:I|we|my|ours-I,we,my,ours單詞之一
|- 或者(?-i:us)-匹配區分大小寫的行內修飾符組,并且僅匹配us(不匹配US)
)- 小組結束\b- 因為前一個字符是一個單詞字符,所以下一個位置是字串的結尾,或者后面有一個非單詞字符。
請參閱Python 演示:
import re
pronounRegex = re.compile(r'\b(I|we|my|ours|(?-i:us))\b',re.I)
pronouns = pronounRegex.findall(' I me you We and all of us make this team tweek, he is from US')
print(pronouns)
# => ['I', 'We', 'us']
請參閱此正則運算式演示(注意選擇 PCRE 選項,因為 regex101 處的 Python 選項存在錯誤)。
uj5u.com熱心網友回復:
\b在運算子之間的正則運算式專案的前后添加單詞邊界,|
r'\bI\b|\bwe\b|\bmy\b|\bours\b|\bus\b'
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/410303.html
標籤:
