我有一些行存储在这样的txt文件中。
A()A的定义
Aardvark(A。)Aardvark的定义
由于实际定义很长,因此这些定义现在只是占位符。 所以我想将这些字符串(“任何单词在这里”)拆分为分隔符。但我的代码似乎不起作用。
import re
f1=open("A-shortened.txt","r")
l=f1.readlines()
#print l
for i in l:
list=re.split("\(()')",i)
print list
re.split里面的部分让我很困惑。我已经尝试了很多参数,但似乎没有人按我的意愿分割字符串。
感谢任何帮助。
答案 0 :(得分:0)
将正则表达式更改为以下内容:
>>> s = 'Aardvark (n.) Definition of Aardvark'
>>> re.split(r'\s*\(.*?\)\s*', s)
['Aardvark', 'Definition of Aardvark']
'\s*\(.*?\)\s*'
基本上意味着:匹配所有可能的空格,后跟(
和)
周围的所有空格以及之后的所有可能空格。
答案 1 :(得分:0)
你想要通过一个开放的paren,任意数量的非关闭的paren角色和一个紧密的paren分开。所以你的正则表达式应该是这样的:
split_by = re.compile(r"""
\( # literal open paren
[^)]*? # anything but a close paren, repeated 0+ times (non-greedy)
\) # literal close paren""", re.X)
s = "Aardvark (n.) Definition of Aardvark"
split_by.split(s) # ["Aardvark ", " Definition of Aardvark"]
如果您也想抓住这些空间:
re.split(r"\s*\([^)]*?\)\s*", s)
答案 2 :(得分:0)
分隔符必须与之间之间要删除的字符串部分相匹配。这有点棘手,因为(
和)
是群组字符,但是你走了:
text = 'Aardvark (n.) Definition of Aardvark'
re.split(r'\s*\([^)]*\)\s*', text)
r''
可防止任何意外的反斜杠转义。这没关系,但比抱歉更安全。
\(
和\)
匹配文字(
和)
。
[^)]
匹配除右括号之外的任何内容。注意:这里没有反斜杠。
\s*
在分隔符的括号部分之前和之后创建任何空格,以便分割部分不以空格开头。如果你想要那些空格,请简化为r'\([^)]*\)'
。