Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 仅保留字符串中的指定内容_Python_Regex_Python 2.7 - Fatal编程技术网

Python 仅保留字符串中的指定内容

Python 仅保留字符串中的指定内容,python,regex,python-2.7,Python,Regex,Python 2.7,我在文件中有以下格式的数据: <string1> abc:string2 <http://yago-knowledge.org/resource/wikicategory_Sports_clubs_established</text\u003e\n______<sha1\u003eqwjfowt5my8t6yuszdb88k2ehskjuh0</sha1\u003e\n____</revision\u003e\n__</page\u00

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

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

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

您可能只需要使用UNIX工具和一些疯狂的正则表达式就可以实现这一点,但我会为此编写一个小型Python脚本:

  • 使用
    Open()
  • 逐行迭代输入文件:
    对于输入文件中的行:
  • 在制表符处拆分行:
    用于行中的零件。拆分('\t'):
  • 检查零件是否包含在
    中:
    如果零件.startswith(“”):
  • 使用正则表达式筛选字符:
    filtered_part=re.sub(r'[^a-zA-Z0-9/:.]','',part)
  • 将过滤的部分重新连接在一起:
    filtered\u line='\t'。连接(过滤的部分)
  • 将筛选行写入输出文件:
    output\u file.Write(筛选行+'\n')

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

在您的问题中最好使用sed或python,因为这两种工具的应用领域非常不同。或者你的意思是“从命令行”,在Linux一行程序中?在这种情况下,为什么不用perl呢?我已经从问题中删除了“sed”。我的意思是说在python或linux中是否有某种方法可以实现同样的效果。即使不是一行,我也不在乎。如果在中使用否定的括号表达式,“sed”替换不起作用吗?我不知道。你能举例说明在最后一个
之间需要的唯一修改是什么吗?即,在第二个选项卡之后?
 <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>.