python regex /在字符串中的两个名称之间拆分

时间:2017-10-17 02:19:31

标签: python regex

我有一个大字符串:

  

Larry E Z(29岁)Larry E Z:嗨。感谢您联系TE,怎么可能   我帮你? (42s)Cesar Mendez:你好Larry(57s)Larry E Z:好   下午塞萨尔(1m 3s)Cesar Mendez:画作2098753(1m 12s)   Cesar Mendez:9注意到什么? (1分18秒)Cesar Mendez:卑鄙(   2m 4s)Cesar Mendez:"密封能力必须在a   申请基础(2m 6s)Larry E Z:9没有特定的   含义。 (2分32秒)Cesar Mendez:这个   句子................."必须评估密封能力   申请基础" (3分3秒)Larry E Z:你的意思是注9(3m   14s)Cesar Mendez:......是(3分17秒)Larry E Z:好的(3分25秒)

我需要将字符串分成两个不同的列表 - 一个包含Larry E Z所说的一切,另一个包含Cesar Mendez。有办法吗?

2 个答案:

答案 0 :(得分:1)

使用正则表达式,您可以抓住所有这些。

import re

# input text
text="""Larry E Z ( 29s ) Larry E Z: Hi. Thank you for contacting TE, how may I help you? ( 42s ) Cesar Mendez : Hello Larry ( 57s ) Larry E Z: Good Afternoon Cesar ( 1m 3s ) Cesar Mendez : on drawing 2098753 ( 1m 12s ) Cesar Mendez : what does note 9 mena? ( 1m 18s ) Cesar Mendez : mean ( 2m 4s ) Cesar Mendez : "sealing capability must be evaluated on an application basis ( 2m 6s ) Larry E Z: The 9 does not have a specific meaning. ( 2m 32s ) Cesar Mendez : this sentence................."sealing capability must be evaluated on an application basis" ( 3m 3s ) Larry E Z: You are meaning Note 9 ( 3m 14s ) Cesar Mendez : ... yes ( 3m 17s ) Larry E Z: Ok ( 3m 25s )"""

# regex for Larry
patt1 = re.compile('Larry E Z:(.*?)\(')
larry = patt1.findall(text)  # get all Larry's part as list
print(larry)

# regex for Cesar
patt2 = re.compile('Cesar Mendez :(.*?)\(')
cesar = patt2.findall(text)  # get all Cesar's
print(cesar)

输出:

['你好。感谢您与TE联系,我可以为您提供哪些帮助? ','下午好的Cesar',' 9没有特定的含义。 ','你的意思是注9','好的']

['您好Larry','在绘图2098753','什么注意9 mena? ','意思是',' "密封能力必须在应用基础上评估,','这句话................."密封能力必须在申请的基础上进行评估" ',' ......是的']

答案 1 :(得分:0)

这不会将其分解为列表,但它会创建命名的捕获组,其中一个是名称。从那里你可以循环结果并列出一个列表。希望这会有所帮助,可能有一种方法可以在正则表达式中完成所有操作,但我现在无法弄明白。

(?<Person>Cesar Mendez|Larry E Z)[: ]{0,3}(?<text>.*?) ?\( ?(?<Time>.*?) ?\)