正则表达式以python分割文本文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式以python分割文本文件相关的知识,希望对你有一定的参考价值。
我正在尝试找到一种方法来将笔录字符串解析为说话者片段(作为列表)。演讲者标签由演讲者姓名的大写字母和冒号表示。我遇到的问题是某些名称包含许多非大写字符。示例可能包括以下内容:
奥巴马:说了些什么
O'MALLEY:说了几句话
GOV。 HICKENLOOPER:完全说了另一句话'
我编写了以下正则表达式,但是我正在努力使其正常工作:
mystring = "OBAMA: said something \nO'MALLEY: said something else \nGOV. HICKENLOOPER: said something else entirely"
parse_turns = re.split(r'\n(?=[A-Z]+(\ |\.|\'|\d)*[A-Z]*:)', mystring)
我想我写的(理想情况下我想做的是一个基于以下内容分割字符串的命令:
1。查找换行符
2。对一个或多个大写字符使用正向预读
3。如果找到大写字符,请从句点,撇号,单个空格和数字列表中查找可选字符
4。如果找到了这些可选字符,请查找其他大写字符。
5。重要的是,在此序列的末尾找到一个冒号。
EDIT:在许多情况下,语音内容中将包含换行符,可能还有冒号。这样,将讲话者标签与语音内容分开的唯一事情就是上述顺序。
答案
如果确实是说话人的名字和他们说的话之间用冒号隔开,那么离开正则表达式进行拆分可能会更简单。
list_of_things = []
mystring = "OBAMA: Hi\nO'MALLEY: True Dat\nHUCK FINN: Sure thing\n"
lines = mystring.split("\n")# 1st split the string into lines based on the \n character
for line in lines:
colon_pos = line.find(":",0) # Finds the position of the first colon in the line
speaker, utterance = line[0:colon_pos].strip(), line[colon_pos+1:].strip()
list_of_things.append((speaker, utterance))
最后,您应该有一个整齐的元组列表,其中包含发言人和他们所说的话。
另一答案
只需将()更改为[]
import re
mystring = "OBAMA: said something \nO'MALLEY: said something else \nGOV. HICKENLOOPER: said something else entirely"
parse_turns = re.split(r'\n(?=[A-Z]+[\ |\.|\'|\d]*)', mystring)
print(parse_turns)
以上是关于正则表达式以python分割文本文件的主要内容,如果未能解决你的问题,请参考以下文章
Python - 用于将文本拆分为句子的正则表达式(句子标记)[重复]