我如何使用带有'()'作为分隔符的re模块拆分字符串?

时间:2015-12-08 09:58:52

标签: python string

我有一些行存储在这样的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里面的部分让我很困惑。我已经尝试了很多参数,但似乎没有人按我的意愿分割字符串。

感谢任何帮助。

3 个答案:

答案 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'\([^)]*\)'