在python中使用正则表达式提取项目

时间:2014-05-30 07:02:26

标签: python regex

我有一个文件,其中包含以下内容:

new=['{"TES1":"=TES0"}}', '{"""TES1:IDD""": """=0x3C""", """TES1:VCC""": """=0x00"""}']

我正在尝试从列表中提取第一个项目TES1:= TES0。我正在尝试使用正则表达式来执行此操作。这是我尝试但我无法抓住第二项TES0。

import re
TES=re.compile('(TES[\d].)+')
for item in new:
    result = TES.search(item)
    print result.groups()

印刷的结果是(' TES1:',)。我已经尝试了各种方法来提取它,但我总是得到相同的结果。任何建议或帮助表示赞赏。谢谢!

3 个答案:

答案 0 :(得分:1)

我认为您正在寻找findall

import re
TES=re.compile('TES[\d].')
for item in new:
    result = TES.findall(item)
    print result

答案 1 :(得分:0)

您可以使用单个替换,例如:

import re

result = re.sub(r'{"(TES\d)":"(=TES\d)"}}', '$1:$2', yourstr, 1)

答案 2 :(得分:0)

第一个选项(带引号)

要匹配"TES1":"=TES0",您可以使用此正则表达式:

"TES\d+":"=TES\d+"
像这样:

match = re.search(r'"TES\d+":"=TES\d+"', subject)
if match:
    result = match.group()

第二个选项(不含引号)

如果你想删除引号,就像在TES1:=TES0中一样,你可以使用这个正则表达式:

搜索:"(TES\d+)":"(=TES\d+)"

替换:\1:\2

像这样:

result = re.sub(r'"(TES\d+)":"(=TES\d+)"', r"\1:\2", subject)

它是如何运作的?

"(TES\d+)":"(=TES\d+)"
  • 匹配字符“"”字面意思"
  • 匹配下面的正则表达式并将其匹配捕获到反向引用号1 (TES\d+)
    • 字面匹配字符串“TES”(区分大小写)TES
    • 匹配单个字符“数字”(任何Unicode脚本中的0-9)\d+
      • 在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)+
  • 匹配字符串“":"”字面意思":"
  • 匹配下面的正则表达式并将其匹配捕获到反向引用号2 (=TES\d+)
    • 字面匹配字符串“= TES”(区分大小写)=TES
    • 匹配单个字符“数字”(任何Unicode脚本中的0-9)\d+
      • 在一次和无限次之间,尽可能多次,根据需要回馈(贪婪)+
  • 匹配字符“"”字面意为"

    \ 1:\ 2

  • 通过捕获组号1 \1

  • 插入上次匹配的文本
  • 按字面意思:
  • 插入字符“:”
  • 通过捕获组号2 \2
  • 插入上次匹配的文本