问题:
我需要从一个文本块中提取$
个字符之间的字符串,但是当涉及正则表达式时,我总是n00b。
例如,本文:
Li Europan lingues $es membres$ del sam familie. Lor $separat existentie es un$ myth.
我想得到一个由以下组成的数组:
{'es membres', 'separat existentie es un'}
Python中的一小段内容会很棒。
答案 0 :(得分:5)
导入 re
模块,然后使用findall()
:
>>> import re
>>> p = re.compile('\$(.*?)\$')
>>> s = "apple $banana$ coconut $delicious ethereal$ funkytown"
>>> p.findall(s)
['banana', 'delicious ethereal']
模式p
代表一个美元符号(\$
),然后是一个非贪婪的匹配组((...?)
),它匹配必须符合的字符(.
)为零或更多(*
),然后是另一个美元符号(\$
)。
答案 1 :(得分:3)
您可以使用re.findall:
>>> re.findall(r'\$(.*?)\$', s)
['es membres', 'separat existentie es un']
答案 2 :(得分:1)
下面的正则表达式捕获非贪婪的$字符之间的所有内容
\ $(。*?)\ $
答案 3 :(得分:1)
import re;
m = re.findall('\$([^$]*)\$','Li Europan lingues $es membres$ del sam familie. Lor $separat existentie es un$ myth');
答案 4 :(得分:0)
没有适用于这个简单案例的正则表达式的替代方案:
>>> s="Li Europan lingues $es membres$ del sam familie. Lor $separat existentie es un$"
>>> s.split("$")[1::2]
['es membres', 'separat existentie es un']
只需将字符串拆分为'$'(这会给你一个python列表),然后只使用此列表中的每个'second'元素。
答案 5 :(得分:-1)
Perl中的有效正则表达式演示:
my $a = 'Li Europan lingues $es membres$ del sam familie. Lor $separat existentie es un$ myth.';
my @res;
while ($a =~ /\$([^\$]+)\$/gos)
{
push(@res, $1);
}
foreach my $item (@res)
{
print "item: $item\n";
}
flags:s - 将所有输入文本视为单行,g - global