Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式(是否可以缩短它?)_Python_Regex - Fatal编程技术网

Python正则表达式(是否可以缩短它?)

Python正则表达式(是否可以缩短它?),python,regex,Python,Regex,我试图解析表单中有数千行文本的输入文件 [month/day/year hh:mm:ss AM/PM]FirstName1 LastName1:text。。。。 [month/day/year hh:mm:ss AM/PM]FirstName2 LastName2:text。。。。 我需要删除括号中的文本,FirstName和LastName,只保留文本部分。我是用蛮力的方式做的,但我相信还有一种更优雅的方式: with open('inputfile.txt') as fin, open('

我试图解析表单中有数千行文本的输入文件

[month/day/year hh:mm:ss AM/PM]FirstName1 LastName1:text。。。。
[month/day/year hh:mm:ss AM/PM]FirstName2 LastName2:text。。。。
我需要删除括号中的文本,
FirstName
LastName
,只保留
文本部分。我是用蛮力的方式做的,但我相信还有一种更优雅的方式:

with open('inputfile.txt') as fin, open('file-out.txt','w') as fout:
    for line in fin:
        fout.write(re.sub('(\[[^)]*\])+(\sFirstName1 LastName1|\sFirstName2 LastName2)', '',line))

有没有办法缩短这个regexp(比如只使用名字的前两个字母和姓氏的后两个字母或者其他什么?)。我没有经常使用正则表达式,所以如果您能假设名字和姓氏没有空格,请提供任何建议。


“”.join(line.split(“”)[5:])

如果你可以假设名字和姓氏没有空格,你可以这样做


“”.join(line.split(“”)[5:])

作为正则表达式的替代方法,您可以在第一次出现
+空格时拆分字符串

text = line.split(": ", 1)[1]

作为正则表达式的替代方法,您可以在第一次出现
+空格时拆分字符串

text = line.split(": ", 1)[1]

+1或以同样的方式:
re.sub(r'.+:','',行)
。真正的问题是OP的数据是否比我们展示的更复杂。如果是这样,这些简单的方法可能太粗糙了。谢谢。但是,如果这就是op需要的全部内容,这就足够了:)re.sub(r'.+:','',第行)返回一个空文件。我正在尝试处理聊天日志并稍后使用nltk分析文本,但我想删除聊天参与者的日期、时间和姓名。@Anastasia我的过于简单的方法怎么样?是的,这很有效!实际上,我也想看到一个regexp解决方案,但它工作得非常好!谢谢+1或以同样的方式:
re.sub(r'.+:','',行)
。真正的问题是OP的数据是否比我们展示的更复杂。如果是这样,这些简单的方法可能太粗糙了。谢谢。但是,如果这就是op需要的全部内容,这就足够了:)re.sub(r'.+:','',第行)返回一个空文件。我正在尝试处理聊天日志并稍后使用nltk分析文本,但我想删除聊天参与者的日期、时间和姓名。@Anastasia我的过于简单的方法怎么样?是的,这很有效!实际上,我也想看到一个regexp解决方案,但它工作得非常好!谢谢这个函数返回:,但它们都合并在一起,这不是我需要的。我需要用nltk进一步分析这个文本,所以我需要保留实际的单词列表。啊,你没有说你想把它放在一个数组中,然后使用
line.split(“”)[5://code>。与alKid的解决方案不同,即使您要处理的文本中有“:”,此解决方案也会起作用。此解决方案返回“:”之后的所有字符串,但它们都合并在一起,这不是我需要的。我需要用nltk进一步分析这个文本,所以我需要保留实际的单词列表。啊,你没有说你想把它放在一个数组中,然后使用
line.split(“”)[5://code>。与alKid的解决方案不同,即使要处理的文本中有“:”符号,这也会起作用。