[英]Extract a name after certain string
我對 Python (3.9) 還是很陌生,但是有了網上所有可用的東西,我想我也許可以解決問題。
我正在嘗試從發票中提取一個人的姓名,該姓名可能是任意長度的 2-3 個連續單詞,並且可能很少包含連字符。
Phone: (111) 311-1111
Desired Name: Friday twk-test Date of Birth: 01/01/1988
這是我到目前為止所擁有的:
(?<=Desired Name:\s{3}[A-Za-z])[A-Za-z]+\s[A-Za-z]+
匹配:
riday twk
output 需要:
Friday twk-test
假設您的所有發票都遵循相同的結構,那么您可以使用此正則表達式:
\bDesired Name:\s*([A-Za-z\s\-]+?(?=\s+Date of Birth))
演示在這里: regex101 演示
這是做什么的:
\b
:單詞邊界Desired Name:
: 匹配我們知道在名稱之前的字符串\s*
: 匹配零個或多個空格([A-Za-z\s\-]+?(?=\s+Date of Birth))
:匹配名稱的捕獲組
[A-Za-z\s\-]+
:匹配任何字母(大寫或小寫),以及空格和連字符。?(?=\s+Date of Birth)
:正向前瞻,因此它將匹配直到此字符串的所有內容。這意味着如果某人的名字和姓氏都有連字符,並且他們還有另一個名字,則將捕獲整個名字。
您可以使用
\bDesired Name:\s*([^\W\d_]+(?:[\s-]+[^\W\d_]+){1,2})
請參閱正則表達式演示。
詳情:
\b
- 單詞邊界Desired Name:
- 文字字符串\s*
- 零個或多個空格([^\W\d_]+(?:[\s-]+[^\W\d_]+){1,2})
- 第 1 組:兩個或三個單詞,僅由 Unicode 字母組成,用一個或多個空格或連字符:
[^\W\d_]+
- 一個或多個 Unicode 字母(?:[\s-]+[^\W\d_]+){1,2}
- 一個或兩個序列:
[\s-]+
- 一個或多個空格或-
字符[^\W\d_]+
- 一個或多個 Unicode 字母。 如果可以有一個空格或連字符,請在[\s-]
之后刪除+
。
請參閱Python 演示:
import re
text="Phone: (111) 311-1111\nDesired Name: Friday twk-test Date of Birth: 01/01/1988"
pattern=r"\bDesired Name:\s*([^\W\d_]+(?:[\s-]+[^\W\d_]+){1,2})"
match = re.search(pattern, text)
if match:
print(match.group(1))
# => Friday twk-test
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.