簡體   English   中英

在某個字符串之后提取名稱

[英]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.

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