0

我在文件中有以下形式的数据:

 <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>.

有什么方法可以实现这一目标吗?

4

1 回答 1

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')

按照这个大纲,你应该很容易编写一个工作脚本。

于 2013-11-14T09:11:54.030 回答