簡體   English   中英

Python 正則表達式 - 在某些值而非全部值上拆分字符串

[英]Python regular expressions - split a string on some values but not all

我正在嘗試構建一個函數來拆分名稱列表。

name_ex = 'Futrelle, Mrs. Jacques Heath (Lily May Peel)'

split_name =re.split('\. |, | ', name_ex)
last_name = split_name[0]
title = split_name[1]
other_names = split_name[2:]

我打印 split_name 時的輸出如下

['Futrelle', 'Mrs', 'Jacques', 'Heath', '(Lily', 'May', 'Peel)']

但是我想要實現的是:

['Futrelle', 'Mrs', 'Jacques', 'Heath', 'Lily May Peel']

知道我將如何實現這一目標嗎?

附加上下文 - 某些名稱沒有括號中的附加名稱 - 所有名稱的順序是姓氏、頭銜、名字(中間名可選)、方括號內的名稱

這應該有幫助。

演示:

import re

name_ex = 'Futrelle, Mrs. Jacques Heath (Lily May Peel)'
m = re.match(r"(?P<lname>[A-Za-z]+), (?P<title>[A-Za-z]+)\. (?P<fname>[A-Za-z]+)(?P<mname>[\sA-Za-z]+)? \((?P<bname>.*?)\)", name_ex)
if m:
    print(m.groups())

輸出:

('Futrelle', 'Mrs', 'Jacques', ' Heath', 'Lily May Peel')

您可以匹配括號中的組,然后匹配后續的字符運行:

import re
name_ex = 'Futrelle, Mrs. Jacques Heath (Lily May Peel)'
new_data = re.findall('(?<=\()[\w\s]+(?=\))|\w+', name_ex)

輸出:

['Futrelle', 'Mrs', 'Jacques', 'Heath', 'Lily May Peel']

暫無
暫無

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

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