我在文件中有以下格式的数据:
<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>.
我有什么方法可以实现这个目标吗?
答案 0 :(得分:0)
你可以用UNIX工具和一些疯狂的正则表达式实现这一点,但我会为此编写一个小的Python脚本:
open()
for line in input_file:
for part in line.split('\t'):
<>
:if part.startswith('<') and line.endswith('>'):
filtered_part = re.sub(r'[^a-zA-Z0-9/:._]', '', part)
filtered_line = '\t'.join(filtered_parts)
output_file.write(filtered_line + '\n')
按照这个大纲,你应该很容易编写一个工作脚本。