我有一个制表符分隔的txt文件。
1 (hi7 there) my
2 (hi7)there he3
我想在括号包含整个条目时删除括号(我不确定单词条目是否是描述它的正确单词,无论如何)
所以输出应该是
1 hi7 there my
2 (hi7)there he3
我知道我可以轻松找到如何删除所有括号。但是,只有当他们接受整个条目时,我才能找到如何删除括号。
我可以简单地使用notepad ++或python,以较快者为准吗?
答案 0 :(得分:3)
这个expr似乎正确处理了所有可能性:
(?m) # multiline mode
(^|\t) # start of line of field
\( # (
([^\t]+?) # anything but a tab
\) # )
(?= # followed by...
$|\t # end of line or field
)
替换为\1\2
。
示例:
import re
rx = r'(?m)(^|\t)\(([^\t]+?)\)(?=$|\t)'
txt = """
1 (hi7 (the)re) (my)
2 (hi7)there he3
(22) (hi7)there he3
(22) (hi7there) (he3)
"""
print re.sub(rx, r'\1\2', txt)
结果:
1 hi7 (the)re my
2 (hi7)there he3
22 (hi7)there he3
22 hi7there he3
答案 1 :(得分:2)
我认为这应该有用
f = open("file.txt")
for line in f:
l = line.strip().split(" ")
for word in l:
if word[0] == "(" and word[-1] == ")":
print (word[1:len(word)-1]),
else:
print (word),
print
用于覆盖
import fileinput
for line in fileinput.FileInput("file.txt", inplace=1):
l = line.strip().split(" ")
s = ""
for sent in l:
if sent[0] == "(" and sent[-1] == ")":
s += sent[1:len(sent) - 1] + " "
else:
s += sent + " "
print s[:-1]
答案 2 :(得分:0)
您可以在python regexp表达式中使用制表符\t
,因此您可以这样匹配:
>>> import re
>>> re.match('^\([^\t]+\)\t.*$', '(hi7 there)\tmy')
>>> <_sre.SRE_Match object at 0x02573950>
>>> re.match('^\([^\t]+\)\t.*$', '(hi7)there\tmy')
>>>
一旦你知道如何匹配你的字符串,只有当行匹配时才很容易删除括号。
答案 3 :(得分:0)
如果它们实际上是 tab 分隔符,则可以替换
\t\(([^\t]*)\)\t
\t # a tab
\( # an opening parenthesis
( # open the capturing group
[^\t]* # anything but a tab
)
\)
\t
与
\t\1\t
我们的想法是捕获相关括号内的文本,并将其用于替换后引用\1
。
请参阅demo