、、、、またはで始まる単語@と終わる単語を一致させるにはどうすればよいですか?;.:
単語には任意の英数字を使用でき、アンダースコアで構成できます。
^@([a-zA-Z0-9_])*[:;, ]$私は、一言の文章だけでうまくいくように見えるものを思いついた。
アンカー^を外すだけで準備完了$です。
からの空の文字列と一致させたくない場合は、の代わりに"Example @ nothing"「1 つ以上の修飾子」を指定することをお勧めします。すなわち+*@([a-zA-Z0-9_]+)[:;, ]
ユーザー名を 1 ~ 15 文字に制限するに*は{1,15}、@([a-zA-Z0-9_]{1,15})[:;, ].
結果として @ 記号と末尾の文字を取得したい場合は、それで@[a-zA-Z0-9_]{1,15}[:;, ]十分です。
名前だけをキャプチャしたい場合は、これを使用できます@([a-zA-Z0-9_]{1,15})[:;, ]
トークンが文字列の最後にあり、特殊文字がなく、キャプチャしたい場合は、次のように変更することをお勧めします[:;, ]。(?:[:;, ]|$)
^文字列 (または複数行モードでは行) の先頭に$一致し、最後に一致するため、それらを取り除く必要があります。
>>> import re
>>> sentence = "foo bar @match don't match @success;"
>>> re.findall('@([a-zA-Z0-9_])*[:;, ]', sentence)
['h', 's']
修飾子 ( *) がキャプチャに一致する括弧の外にあるため、最後の文字のみをキャプチャしています。内側に移動すると、次のようになります。
>>> re.findall('@([a-zA-Z0-9_]*)[:;, ]', sentence)
['match', 'success']
@ と末尾の文字もキャプチャしたい場合は、それらを括弧内に移動するだけです。
>>> re.findall('(@[a-zA-Z0-9_]*[:;, ])', sentence)
['@match ', '@success;']
また、質問のコメントで述べたように、特定の文字数に制限したい場合としない場合があります。
>>> sentence = "foo bar @match don't match @somereallylongnamehere @success;"
>>> re.findall('(@[a-zA-Z0-9_]{1,15}[:;, ])', sentence)
['@match ', '@success;']
(もちろん、この最後の式だけでなく、前の式のいずれにも長さ制限を追加できます)。