我有一个嘈杂的数据......类似的东西
<@ """@$ FSDF >something something <more noise>
Run Code Online (Sandbox Code Playgroud)
现在我只想提取"something something".有没有办法如何删除这两个分隔符之间的文本"<"和">"?
Pau*_*ine 54
使用正则表达式:
>>> import re
>>> s = '<@ """@$ FSDF >something something <more noise>'
>>> re.sub('<[^>]+>', '', s)
'something something '
Run Code Online (Sandbox Code Playgroud)
[更新]
如果您尝试了类似的模式<.+>,其中点表示任何字符,加号表示一个或多个,您知道它不起作用.
>>> re.sub(r'<.+>', s, '')
''
Run Code Online (Sandbox Code Playgroud)
为什么!?!这是因为正则表达式默认是"贪婪的".表达式将匹配任何内容,直到字符串结束,包括>- 这不是我们想要的.我们想匹配<并停在下一个>,所以我们使用的[^x]模式意味着"任何字符,但x"(x是>).
该?操作者接通比赛"非贪婪",所以这有同样的效果:
>>> re.sub(r'<.+?>', '', s)
'something something '
Run Code Online (Sandbox Code Playgroud)
前一个更明确,这个更少打字; 请注意,这x?意味着零或一次出现x.
060*_*002 15
当然,您可以使用正则表达式.
import re
s = #your string here
t = re.sub('<.*?>', '', s)
Run Code Online (Sandbox Code Playgroud)
上面的代码应该这样做.
小智 5
首先,谢谢Paulo Scardine,我用你的心来做伟大的事情。这个想法是为了打印而拥有无标签的LibreOffice po文件。我编写了以下脚本,该脚本将清除帮助文件中的更小和更容易的文件。
import re
f = open('a.csv')
text = f.read()
f.close()
clean = re.sub('<[^>]+>', ' ', text)
f = open('b.csv', 'w')
f.write(clean)
f.close()
Run Code Online (Sandbox Code Playgroud)