正则表达式以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]

Python - 用于将文本拆分为句子的正则表达式(句子标记)[重复]

正则表达式用引号和冒号分割

Python正则表达式拆分但保留某些字符以进行拆分

使用正则表达式重新字符串匹配提取 URL 链接 - Python

使用正则表达式解析多个文本字段并编译成 Pandas DataFrame