Python在引号之间查找文件中的文本

时间:2015-12-08 11:48:14

标签: python

我试图在引号内捕获文本并将它们设置为变量,以便我在稍后阶段更改它们。我知道如何在bash shell中执行此操作,但我不知道如何在Python中执行此操作。

我是从这开始的,但我希望有人可以指出我的错误。

import re
input = open(filename, 'r')
quotes = re.findall(r'"[^"]*"', input.read(), re.U)
print quotes

可悲的是,这输出:

['"test1"', '"test2"']

我正在寻找:

value1 = test1
value2 = test2

在Bash中我使用了这个(但我显然不能这样使用它!):

i=0
regex='"([^"]*)"'
while read line
do
    if [[ $line =~ $regex ]]; then
        printf -v "text$i" '%s' "${BASH_REMATCH[1]}"
        i=$((i + 1))
    fi
done < filename

echo "value1: $text0"
echo "value2: $text1"

3 个答案:

答案 0 :(得分:1)

使用非捕获组(?:...),如下所示:

In [18]: re.findall('(?:")([^"]*)(?:")', '''hello "foo" "bar" haha''')
Out[18]: ['foo', 'bar']

或使用非消费群体(?<=...)等:

In [14]: re.findall('(?<=")[^"]*(?=")', '''hello "foo" "bar" haha''')
Out[14]: ['foo', ' ', 'bar']

后者的副作用是在" ""foo"之间选择"bar"

答案 1 :(得分:0)

这里的问题是两个字符串(" ")之间的正则表达式匹配 使用以下内容:

vars = re.findall('"(.*?)"', text)

答案 2 :(得分:-1)

你在python中使用的正则表达式在bash中是不同的。它应该与&#34;([^&#34;] *)&#34;一起使用。我试过..

import re
input = open(filename, 'r')
quotes = re.findall(r'"([^"]*)"', input.read(), re.U)
for value in quotes :
    print value