ANj*_*ell 2 python regex python-2.7
我有文件包含几行字符串写为:
[(W)40(indo)25(ws )20(XP)111(, )20(with )20(the )20(fragment )20(enlar)18(ged )20(for )20(clarity )20(on )20(Fig. )] TJ
Run Code Online (Sandbox Code Playgroud)
我只需要括号内的文字.我尝试使用以下代码:
import re
readstream = open ("E:\\New folder\\output5.txt","r").read()
stringExtract = re.findall('\[(.*?)\]', readstream, re.DOTALL)
string = re.compile ('\(.*?\)')
stringExtract2 = string.findall (str(stringExtract))
Run Code Online (Sandbox Code Playgroud)
但是输出中不存在一些字符串(或文本),例如,对于上面的字符串,输出中找不到单词(with).字符串的排列也与文件不同,例如,对于上面的字符串(放大)和(ged),第二个(ged)出现在(放大)之前,例如:( ged其他字符串.....放大)我能解决这些问题吗?
没有正则表达式:
[p.split(')')[0] for p in s.split('(') if ')' in p]
Run Code Online (Sandbox Code Playgroud)
输出:
['W', 'indo', 'ws ', 'XP', ', ', 'with ', 'the ', 'fragment ', 'enlar', 'ged ', 'for ', 'clarity ', 'on ', 'Fig. ']
Run Code Online (Sandbox Code Playgroud)
findall 看起来像你这里的朋友。你不只是想要:
re.findall(r'\(.*?\)',readstream)
Run Code Online (Sandbox Code Playgroud)
返回:
['(W)',
'(indo)',
'(ws )',
'(XP)',
'(, )',
'(with )',
'(the )',
'(fragment )',
'(enlar)',
'(ged )',
'(for )',
'(clarity )',
'(on )',
'(Fig. )']
Run Code Online (Sandbox Code Playgroud)
编辑:如@vikramis 所示,要删除括号,请使用:re.findall(r'\((.*?)\)', readstream)。另外,请注意,使用以下内容修剪尾随空格是很常见的(但这里不要求):
re.findall(r'\((.*?) *\)', readstream)
Run Code Online (Sandbox Code Playgroud)
你的第一个问题是
stringExtract = re.findall('\[(.*?)\]', readstream, re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
我不知道你为什么要这样做,而且我很确定你不想这样做
试试这个
readstream = "[(W)40(indo)25(ws )20(XP)111(, )20(with )20(the )20(fragment )20(enlar)18(ged )20(for )20(clarity )20(on )20(Fig. )] TJ"
stringExtract = re.findall('\(([^)]+)\)', readstream, re.DOTALL)
Run Code Online (Sandbox Code Playgroud)
它表示查找括号内非右括号的所有内容
| 归档时间: |
|
| 查看次数: |
5686 次 |
| 最近记录: |