我正在尝试将一些值从文本导出到txt文件。 我的文字有这样的形式:
"a='one' b='2' c='3' a='two' b='8' c='3'"
我要导出密钥“a”的所有值 结果必须像
one
two
答案 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
有很多变化。