我试图在引号内捕获文本并将它们设置为变量,以便我在稍后阶段更改它们。我知道如何在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"
答案 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