0

私は Java の正規表現に関するオンラインのチュートリアルをいくつか見てきましたが、それでも正規表現を作成するのはかなり難しいと感じています。

サンプル テキスト (ツイート):

@HIMYM_CBS: Barney Stinson. That Guy's Awesome

別のサンプル:

Barney Stinson.  @HIMYM_CBS: That Guy's Awesome

HIMYM_CBSさんへのツイートです。

私が達成したいのは、ツイートが与えられた場合、そのツイートが誰かに宛てられているかどうかを知りたいということです (この場合は HIMYM_CBS のように)。誰に宛てたものでも構いません。

私の質問は次のとおりです。これを達成するための正規表現を構築するための私の考え方は何ですか?

ツイートは文字列として保存されます。

String Tweet = "@HIMYM_CBS: Barney Stinson. That Guy's Awesome";
4

5 に答える 5

1
String tweet = "@HIMYM_CBS: Barney Stinson. That Guy's Awesome";
Pattern p = Pattern.compile("@(\\w+)");
Matcher m = p.matcher(tweet);
if (m.find()) {
  System.out.println(m.group(1));
} else {
  System.out.println("not found.");
}

おそらく、 Patternクラスの API ドキュメントを確認したいと思うでしょう。

コード中の\wは、 に相当する単語文字を意味し[a-zA-Z_0-9]ます。

于 2013-07-03T21:02:54.163 に答える
1
/(?:^|(?<=\s))@([A-Za-z_0-9]+)(?=[.?,:]?\s)/

Twitter ハンドルには、文字、数字、またはアンダースコア記号 (_) のみを使用できます。

サンプル テスト ケース:
@This (行頭で一致) 正規表現は @this を無視します@separateが、トークンおよび のような文末のトークンで一致し@thisます。または@this.(またはを選択せず?) と@this: と@this、ダイレクト メッセージ SO スタイルのように。はい、ツイート内のemail@address.comも無視されます。

正規表現 while matching on@を使用するとuserid、.@useridMatcher#group(1)

于 2013-07-03T21:09:47.217 に答える