如何用python搜索和导出值并重新?

时间:2012-08-20 09:03:34

标签: python regex

我正在尝试将一些值从文本导出到txt文件。 我的文字有这样的形式:

"a='one' b='2' c='3' a='two' b='8' c='3'"

我要导出密钥“a”的所有值 结果必须像

one
two

5 个答案:

答案 0 :(得分:3)

其他答案对于您的特定情况是正确的,但我认为带有lookbehind / lookahead的正则表达式是一种更通用的解决方案,即:

import re

text = "a='one' b='2' c='3' a='two' b='8' c='3'"

expr = r"(?<=a=')[^']*(?=')"

matches = re.findall(expr,text)
for m in matches:
    print m  ##or whatever

这将匹配以a开头的单引号之间的任何表达式,即a ='xyz',a ='my#1.abcd'和a ='a = 5%'将全部匹配

答案 1 :(得分:2)

这个正则表达式很容易理解:

pattern = r"a='(.*?)'"

它不使用外观(如(?<=a=')[^']*(?=')) - 所以它非常简单..

整个计划:

#!/usr/bin/python

import re

text = "a='one' b='2' c='3' a='two' b='8' c='3'"
pattern = r"a='(.*?)'"

for m in re.findall( pattern, text ):
  print m

答案 2 :(得分:0)

你可以使用这样的东西:

import re
r = re.compile(r"'([a-z]+)'")

f = open('input')
text = f.read()

m = r.finditer(text)

for mm in m:
    print mm.group(1)

答案 3 :(得分:0)

以为我会给出一个没有重新解决的解决方案:

>>> text = "a='one' b='2' c='3' a='two' b='8' c='3'"
>>> step1 = text.split(" ")
>>> step1
["a='one'", "b='2'", "c='3'", "a='two'", "b='8'", "c='3'"]
>>> step2 = []
>>> for pair in step1:
    split_pair = pair.split("=")
    step2.append([split_pair[0],split_pair[1]]) 
>>> print step2
[['a', "'one'"], ['b', "'2'"], ['c', "'3'"], ['a', "'two'"], ['b', "'8'"], ['c', "'3'"]]
>>> results = []
>>> for split_pair in step2:
        if split_pair[0] == "a":
            results.append(split_pair[1])   
>>> results
["'one'", "'two'"]

不是最优雅的方法,但它有效。

答案 4 :(得分:0)

另一种非正则表达式解决方案:您可以使用shlex模块和.partition方法(或.split()maxsplit=1):

>>> import shlex
>>> s = "a='one' b='2' c='3' a='two' b='8' c='3'"
>>> shlex.split(s)
['a=one', 'b=2', 'c=3', 'a=two', 'b=8', 'c=3']
>>> shlex.split(s)[0].partition("=")
('a', '=', 'one')

所以它只是

>>> for group in shlex.split(s):
...     key, eq, val = group.partition("=")
...     if key == 'a':
...         print val
... 
one
two

有很多变化。