查找以Python中的$符号开头的字符串中的所有单词

时间:2012-07-10 15:30:10

标签: python regex dollar-sign

如何提取以$符号开头的字符串中的所有单词?例如在字符串

This $string is an $example

我想提取单词$string$example

我试过这个正则表达式\b[$]\S*但是只有当我使用普通字符而不是美元时它才能正常工作。

4 个答案:

答案 0 :(得分:22)

>>> [word for word in mystring.split() if word.startswith('$')]
['$string', '$example']

答案 1 :(得分:8)

您的expr的问题是\b在空格和$之间不匹配。如果删除它,一切正常:

z = 'This $string is an $example'
import re
print re.findall(r'[$]\S*', z) # ['$string', '$example']

为避免匹配words$like$this,请添加一个lookbehind断言:

z = 'This $string is an $example and this$not'
import re
print re.findall(r'(?<=\W)[$]\S*', z) # ['$string', '$example']

答案 2 :(得分:5)

\b转义符在字边界处匹配,但$符号不被视为您可以匹配的单词的一部分。改为匹配起点或空格:

re.compile(r'(?:^|\s)(\$\w+)')

我在这里使用了反斜杠转义符号来代替字符类,而\w+字符字符类别至少包含1个字符,以便更好地反映您的意图。

演示:

>>> import re
>>> dollaredwords = re.compile(r'(?:^|\s)(\$\w+)')
>>> dollaredwords.search('Here is an $example for you!')
<_sre.SRE_Match object at 0x100882a80>

答案 3 :(得分:2)

有几种方法,取决于您想要定义为“单词”的内容,以及是否所有内容都用空格描述:

>>> s='This $string is an $example $second$example'

>>> re.findall(r'(?<=\s)\$\w+',s)
['$string', '$example', '$second']

>>> re.findall(r'(?<=\s)\$\S+',s)
['$string', '$example', '$second$example']

>>> re.findall(r'\$\w+',s)
['$string', '$example', '$second', '$example']

如果你在行的开头有一个'word':

>>> re.findall(r'(?:^|\s)(\$\w+)','$string is an $example $second$example')
['$string', '$example', '$second']