我似乎无法使用正则表达式获取我想要的文本。
我需要用“......从...到...”分隔文本
示例输入:
text1 from text2 to text3
我目前的代码:
String[] word=input.split("from|to",3);
System.out.println("Text 1: "+word[0]);
System.out.println("Text 2: "+word[1]);
System.out.println("Text 3: "+word[2]);
如果我想在Text1中忽略单词'..from..to ..'并且仅使用'... from..to ..',我会如何改进此代码的任何想法,这是最后一次出现(即text2和text3)
示例:
from here to China will take you from 10 to 12 hours.
我想要文字:
from here to China will take you
作为一个单句10
12 hours
答案 0 :(得分:1)
String split()不会帮助您实现此目的。你必须使用模式匹配。见这个例子:
String text = "from here to China will take you from 10 to 12 hours";
Pattern pattern = Pattern.compile("\\b(from\\s+.*?)\\s+from\\s+(\\d+)\\s+to\\s+(\\d+\\s+hours?)\\b");
Matcher m = pattern.matcher(text);
if (m.find()) {
System.out.println(m.group(1));
System.out.println(m.group(2));
System.out.println(m.group(3));
}
如果你的字符串格式发生了其他变化,这将无效。
答案 1 :(得分:1)
这会像你的例子一样分割你的短语:
String input = "from here to China will take you from 10 to 12 hours";
System.out.println(Arrays.toString(input.split("\\bfrom\\b\\s+(?=\\d)|\\bto\\b\\s+(?=\\d)")));
在分割方法中使用from|to
的问题是,您的短语包含from
和to
的多个出现。因此,在这种情况下,有必要指定您只需要from
和to
后跟空格和数字。还添加了字边界\\b
以仅匹配to
字词,而不是仅包含to
的字词,例如toronto
所以你可以像这样调整你的代码:
String[] word=input.split("\\bfrom\\b\\s+(?=\\d)|\\bto\\b\\s+(?=\\d)");
System.out.println("Text 1: "+word[0]);
System.out.println("Text 2: "+word[1]);
System.out.println("Text 3: "+word[2]);
更新:正则表达式实际上可以简化为:
\\b(from|to)\\b\\s+(?=\\d)