2012-04-23 1 views
0

入力がタイプsomething sth FROM xxxx TO yyyyと一致するかどうかを調べたい場所ベースのサービスのテキスト処理を行っています。基本的には、ユーザーが入力するソースと宛先を見つける必要があります。私は正規表現に強くないです例パターンと一致する正規表現:何かからxxxx TO yyyy

show me how can I go from xxxx to yyyy 
I want to go to abcd 
I want to go from abcd to xyz 

については

、私が出てくる可能性が正規表現が動作していないA-Za-zA-Za-zからA-Za-zです。誰でも単語を任意の数の単語で区切ることができる複数のキーワード正規表現にマッチさせる方法を教えてください。例えば、I want to go FROM manhattan TO SeattleまたはI want to go FROM times square, New York City TO Seattleです。私はその後、索引付けによってソース/宛先を抽出することができます。

文の途中にFROMが含まれている場合は抽出することができますが、一般的にして複数のルールを作成する必要はありません。ユーザーが言うことがあります

I want to go TO x FROM y 
I want to go FROM x to Y 

上記の文章では、送信元と送信先が入れ替わっています。

おかげで私は動作するはず.*(from).*(to).*

+0

都市名(例:ユーザーが入力した場合)に「to」が含まれないことを保証できますか?それ以外の場合は、名前の一部である表現と表現の一部である表現を判別する方法がありません。 –

+0

@ nathanjosiah私は試した正規表現を述べた。また、私の入力文にFROMという単語が含まれていても、FROMがTOの前に来るか後で来るか、つまりソースが最初に言及されているか、先に先に出ているかどうかを知りたい場合は、スクリーンショットを追加しました。 – Yogesh

+2

"。*(from)。*(to)。*"を試しましたか? – anonymous

答えて

0

最も簡単な1。

+0

なぜあなたはそれがとにかく一致することを知っているものをグループ化する必要がありますか? – Joey

0

(?<=from\s)(.*)(?<=\sto)(.*)だろうと考えることができます

+0

私はJavaでコーディングしていますが、この構文は理解できませんでしたが、助けてくれてありがとうございます。上記の他の正規表現は動作しています。よろしく – Yogesh

2

あなたは単語境界のアンカーを使用する必要がある、または正規表現はまた、あなたがマッチワードではなく、マッチワード自身の間の部分をキャプチャする必要があります

I want to go from Montreal to Toronto. 

のような文章に失敗します:

Pattern regex1 = Pattern.compile(
    "\\b  # Match word boundary\n" + 
    "from # Match 'from'\n" + 
    "\\s+ # Match whitespace\n" + 
    "(.+?) # Match one or more characters\n" + 
    "\\b  # Match word boundary\n" + 
    "to  # Match 'to'\n" + 
    "\\s+ # Match whitespace\n" + 
    "(.+) # Match one or more characters", 
    Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.COMMENTS); 
Pattern regex2 = Pattern.compile("\\bto\\s+(.+?)\\bfrom\\s+(.+)", Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE | Pattern.COMMENTS); 

Matcher regexMatcher = regex1.matcher(subjectString); 
if (regexMatcher.find()) { 
    fromString = regexMatcher.group(1); 
    destString = regexMatcher.group(2); 
} else { 
    Matcher regexMatcher = regex2.matcher(subjectString); 
    if (regexMatcher.find()) { 
     fromString = regexMatcher.group(1); 
     destString = regexMatcher.group(2); 
    } 
} 
関連する問題