0

文字列の長さに関係なく、文字列配列に存在するより類似したパターンを取得する方法と、そのような類似のパターンがいくつ存在するのだろうか..

例えば:

Mr.Potterとしても知られるハリー・ジェームズ・ポッター。ポッターはハワードでとても有名です。ハリー・ジェームズ・ポッターはミスター・ポッターとも呼ばれていました。

Harry James Potter と Mr.Potter の間のコンテンツを見つける必要があります。

出力は

  1. としても知られている
  2. とも呼ばれている

誰でも私を助けることができますか?

ここに私のコードがあります:

import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class RegexTestHarness {
    public static void main(String[] args){

        String regex = "Harry James Potter (.*?) Mr.Potter";

        String strToSearch = "Harry James Potter also known as Mr.Potter. Harry       James Potter is famous as  Mr. Potter";

        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);

        Matcher matcher = pattern.matcher(strToSearch);

        while (matcher.find()) {

            System.out.println("Text is at "+matcher.group()+"::"+matcher.start()+"::     "+matcher.end());
            System.out.println(matcher.groupCount());

            System.out.println(matcher.group(1));
        }
    }
}
4

3 に答える 3

0

この正規表現は、"Harry James Potter" と "Mr.Potter" の間に含まれるすべてのものを取得します。

Harry James Potter (.*?) Mr\.Potter

ここでテスト済み

Regex の実装によっては、結果グループ 1 を取得する必要がある場合があります。

于 2013-02-06T11:02:50.957 に答える
0

正規表現文字列を記述するときは、Mr.Potter のピリオドを必ずエスケープしてください。また、 strToSearch にはランダムなスペースが含まれていたため、正規表現で目的のものが見つかりませんでした。このコードは、提供された例を生成します。

try {
        String regex = "Harry James Potter (.*?) Mr\\.Potter";
        String strToSearch = "Harry James Potter also known as Mr.Potter. Potter is very famous in hagwards. Harry James Potter also called Mr.Potter.";
        Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(strToSearch);
        int start = 0;
        int count = 1;
        while (matcher.find(start)) {
            System.out.println(count + ". " + matcher.group(1));
            start = matcher.end();
            count++;
        }

    } catch(Exception ex) {
        ex.printStackTrace();
    }
于 2013-02-07T05:12:56.420 に答える
-1
    String s = "Harry James Potter also known as Mr.Potter . Potter is very famous in hagwards. Harry James Potter also called Mr.Potter.";
    Pattern pattern = Pattern.compile("(?<=Harry James Potter )(.*?)(?= Mr.Potter)");
    Matcher matcher = pattern.matcher(s);
    while (matcher.find()) {            
        System.out.println(matcher.group(1));
    }

出力:

also known as
also called
于 2014-01-25T15:50:31.347 に答える