正则表达式从文本中获取$ chars之间的内容

时间:2009-12-30 23:42:58

标签: python regex

问题:
我需要从一个文本块中提取$个字符之间的字符串,但是当涉及正则表达式时,我总是n00b。

例如,本文:
Li Europan lingues $es membres$ del sam familie. Lor $separat existentie es un$ myth.

我想得到一个由以下组成的数组:
{'es membres', 'separat existentie es un'}

Python中的一小段内容会很棒。

6 个答案:

答案 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