1

、、、、またはで始まる単語@と終わる単語を一致させるにはどうすればよいですか?;.: 

単語には任意の英数字を使用でき、アンダースコアで構成できます。

^@([a-zA-Z0-9_])*[:;, ]$私は、一言の文章だけでうまくいくように見えるものを思いついた。

4

2 に答える 2

4

アンカー^を外すだけで準備完了$です。

からの空の文字列と一致させたくない場合は、の代わりに"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})[:;, ]

トークンが文字列の最後にあり、特殊文字がなく、キャプチャしたい場合は、次のように変更することをお勧めします[:;, ](?:[:;, ]|$)

于 2012-06-11T10:31:43.180 に答える
3

^文字列 (または複数行モードでは行) の先頭に$一致し、最後に一致するため、それらを取り除く必要があります。

>>> 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;']

(もちろん、この最後の式だけでなく、前の式のいずれにも長さ制限を追加できます)。

于 2012-06-11T10:37:20.233 に答える