簡體   English   中英

Function 使用正則表達式從文本字符串中提取公司注冊號

[英]Function to extract company register number from text string using Regex

我有一個 function 從給定文本中提取公司注冊號(德語: handelsregisternummer )。 雖然我針對這個特定問題的正則表達式匹配正確的格式(請參閱演示),但我無法提取正確的公司注冊號。

我想提取HRB 142663 B但我得到HRB 142663

大多數數字的格式為HRB 123456 ,但有時會在末尾附加字母B

import re

def get_handelsregisternummer(string, keyword):

    # https://regex101.com/r/k6AGmq/10
    reg_1 = fr'\b{keyword}[,:]?(?:[- ](?:Nr|Nummer)[.:]*)?\s?(\d+(?: \d+)*)(?: B)?'

    match = re.compile(reg_1)
    handelsregisternummer = match.findall(string)  # list of matched words

    if handelsregisternummer:  # not empty
        return handelsregisternummer[0]
    else:  # no match found
        handelsregisternummer = ""

    return handelsregisternummer

從網站上抓取的示例文本。 換行符使單詞相互連接:

text_impressum = """"Berlin, HRB 142663 BVAT-ID.: DE283580648Tax Reference Number:"""

申請 function:

for keyword in ['HRB', 'HRA', 'HR B', 'HR A']:
    handelsregisternummer = get_handelsregisternummer(text_impressum, keyword=keyword)
    if handelsregisternummer: # if list is not empty anymore, then do...
        handelsregisternummer = keyword + " " + handelsregisternummer
        break
    if not handelsregisternummer:  # if list is empty
        handelsregisternummer = 'not specified'
handelsregisternummer_dict = {'handelsregisternummer':handelsregisternummer}

之后我得到:

handelsregisternummer_dict ={'handelsregisternummer': 'HRB 142663'}

但我想要這個:

handelsregisternummer_dict ={'handelsregisternummer': 'HRB 142663 B'}

您需要在正則表達式中使用兩個捕獲組來捕獲關鍵字和數字,並且只需匹配 rest:

reg_1 = fr'\b({keyword})[,:]?(?:[- ](?:Nr|Nummer)[.:]*)?\s?(\d+(?: \d+)*(?: B)?)'
#            |_________|                                   |___________________|

然后,您需要連接、加入所有匹配並返回的捕獲組findall

if handelsregisternummer: # if list is not empty anymore, then do...
    handelsregisternummer = " ".join(handelsregisternummer)
    break

請參閱Python 演示

暫無
暫無

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

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