【发布时间】:2013-11-14 08:20:35
【问题描述】:
我在一个文件中有以下形式的数据:
<string1> abc:string2 <http://yago-knowledge.org/resource/wikicategory_Sports_clubs_established</text\u003e\n______<sha1\u003eqwjfowt5my8t6yuszdb88k2ehskjuh0</sha1\u003e\n____</revision\u003e\n__</page\u003e\n__<page\u003e\n____<title\u003ePortal:Tropical_cyclones/Anniversaries/August_22</title\u003e\n____<ns\u003e100</ns\u003e\n____<id\u003e7957689</id\u003e\n____<revision\u003e\n______<id\u003e446349886</id\u003e\n______<timestamp\u003e2011-08-23T17:38:19Z</timestamp\u003e\n______<contributor\u003e\n________<username\u003eLightbot</username\u003e\n________<id\u003e7178666</id\u003e\n______</contributor\u003e\n______<comment\u003eDelink_non-obscure_units._Conversions._Report_bugs_to_[[User_talk:Lightmouse>.
上述文件中的分隔符是一个制表符(\t),即string1与abc:string2由\t分隔。对于其余的字符串也是如此。
现在我只想保留字母、数字、/、:、'。和_ 包含在<> 中的字符串中。我想从 <> 中包含的字符串中删除除指定字符之外的所有字符。
有没有什么方法可以让我使用 linux 命令或 python 来实现这一点?我想用下划线替换所有不需要的字符。
<string1> abc:string2 <http://yago-knowledge.org/resource/wikicategory_Sports_clubs_established_text_u003e_n_______sha1_u003eqwjfowt5my8t6yuszdb88k2ehskjuh0_sha1_u003e_n_____revision_u003e_n___/page_u003e_n___page_u003e_n_____title_u003ePortal:Tropical_cyclones/Anniversaries/August_22_/title_u003e_n_____ns_u003e100_/ns_u003e_n_____id_u003e7957689_/id_u003e_n_____revision_u003e_n_______id_u003e446349886_/id_u003e_n_______timestamp_u003e2011-08-23T17:38:19Z_/timestamp_u003e_n_______contributor_u003e_n_________username_u003eLightbot_/username_u003e_n_________id_u003e7178666_/id_u003e_n_______/contributor_u003e_n_______comment_u003eDelink_non-obscure_units._Conversions._Report_bugs_to___User_talk:Lightmouse>.
有什么方法可以实现吗?
【问题讨论】:
-
在您的问题中坚持使用 sed 或 python 会更好,因为这两个工具具有非常不同的应用领域。或者你的意思是“从命令行”,在 Linux one liner 中?在那种情况下,为什么不用 perl 呢?
-
我已从问题中删除了“sed”。我的意思是说在 python 或 linux 中是否有某种方法可以实现相同的目标。即使它不是单线,我也无所谓。
-
在regex 中使用否定括号表达式是否不能进行“sed”替换?
-
我不知道..你能举个例子解释一下
-
在最后一个
<和>之间是否只需要修改?即,在第二个标签之后?
标签: python regex python-2.7