12

$記号で始まる文字列内のすべての単語を抽出するにはどうすればよいですか?たとえば、文字列で

This $string is an $example

$string単語とを抽出したい$example

この正規表現を試してみまし\b[$]\S*たが、ドルではなく通常の文字を使用した場合にのみ正常に機能します。

4

4 に答える 4

23
>>> [word for word in mystring.split() if word.startswith('$')]
['$string', '$example']
于 2012-07-10T15:34:01.617 に答える
9

exprの問題は\b、スペースと。が一致しないこと$です。削除すると、すべてが機能します。

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

一致を回避するwords$like$thisには、後読みアサーションを追加します。

z = 'This $string is an $example and this$not'
import re
print re.findall(r'(?<=\W)[$]\S*', z) # ['$string', '$example']
于 2012-07-10T15:34:15.183 に答える
6

エスケープは単語の境界で一致します\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>
于 2012-07-10T15:31:24.167 に答える
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']

行の先頭に「単語」がある場合:

>>> re.findall(r'(?:^|\s)(\$\w+)','$string is an $example $second$example')
['$string', '$example', '$second']
于 2012-07-10T15:34:47.427 に答える