我正在为基于位置的服务进行一些文本处理,我想知道输入是否与类型something sth FROM 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-z
从A-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
在上面的句子中,源和目的地被交换。
由于
答案 0 :(得分: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);
}
}
答案 1 :(得分:0)
.*(from).*(to).*
答案 2 :(得分:0)
(?<=from\s)(.*)(?<=\sto)(.*)
应该有用。