0

#hashtags に一致する正規表現を Python で作成しようとしています。ハッシュタグの私の定義は次のとおりです。

  • から始まる作品です。#
  • を除くすべての文字を含めることができます。[ ,\.]
  • テキストのどこでも構いません

なので、本文では

#This string cont#ains #four, and #only four #hashtags.

ここでのハッシュはThisfouronlyおよびhashtagsです。

私が抱えている問題は、行頭のオプションのチェックです。

  • [ \.,]+オプションの先頭と一致しないため、実行しません。
  • [ \.,]?似合いすぎてやらない。

+ 付きの例

In []: re.findall('[ \.,]+#([^ \.,]+)', '#This string cont#ains #four, and #only four #hashtags.')
Out[]: ['four', 'only', 'hashtags']

? の例

In []: re.findall('[ \.,]?#([^ \.,]+)', '#This string cont#ains #four, and #only four #hashtags.')
Out[]: ['This', 'ains', 'four', 'only', 'hashtags']

オプションはどのように行頭に一致させることができますか?

4

2 に答える 2

3

これはうまくいくようです:

>>> re.findall(r'\B#([^,\W]+)', '#This string cont#ains #four, and #only four #hashtags.')
['This', 'four', 'only', 'hashtags']
  • \B: 空の文字列に一致しますが、それが単語の先頭または末尾にない場合のみです。これは、 、 、にはr'py\B'一致しますが'python'、、、またはには一致しないことを意味します。は とは正反対なので、との設定にも従います。'py3''py2''py''py.''py!'\B\bLOCALEUNICODE
  • \W:LOCALEおよびUNICODEフラグが指定されていない場合、英数字以外の任意の文字に一致します。これは set と同等[^a-zA-Z0-9_]です。LOCALE を使用すると、 set[0-9_]になく、現在のロケールの英数字として定義されていない任意の文字に一致します。が設定されている場合、これは、Unicode 文字プロパティ データベースで非英数字として分類されたプラス文字UNICODE以外の文字と一致します。[0-9_]
于 2012-09-26T20:54:37.470 に答える
0

正規表現の前に、不要なものを伝えることができます。

(?<!\w)(#[^ \.,]+)

否定的な後読みを使用すると、それを行うことができます

于 2012-09-26T20:57:17.157 に答える