Java 正则表达式,用于匹配具有固定前缀和后缀的可变作品数
样本输入: xxx xxx xxx xxx(可以是任意数量的单词)是生还是死 例如:Java 正则表达式,用于匹配具有固定前缀和后缀的可变作品数,java,regex,Java,Regex,样本输入: xxx xxx xxx xxx(可以是任意数量的单词)是生还是死 例如: Did Michael Jackson live or die ? 我想捕捉:迈克尔·杰克逊,活着,死去。这个句子的单词之间可以有任意数量的空格 我该怎么做 Did\\s+(.+)\\s+(\\S+)\\s+or\\s+(\\S+)\\s*\\? 还是我遗漏了什么 编辑:将单反斜杠更改为双反斜杠类似的操作会起作用。你需要选择第一组,迈克尔·杰克逊,并按空间角色进行分割 Pa
Did Michael Jackson live or die ?
我想捕捉:迈克尔·杰克逊,活着,死去。这个句子的单词之间可以有任意数量的空格
我该怎么做
Did\\s+(.+)\\s+(\\S+)\\s+or\\s+(\\S+)\\s*\\?
还是我遗漏了什么
编辑:将单反斜杠更改为双反斜杠类似的操作会起作用。你需要选择第一组,迈克尔·杰克逊,并按空间角色进行分割
Pattern regex = Pattern.compile("^Did (.+)\s+(\w+)\s+or\s+(\w+)$",
Pattern.CASE_INSENSITIVE |
Pattern.UNICODE_CASE);
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find())
{
String []person = regexMatcher.group(0).split(" ");
String action1 = regexMatcher.group(1);
String action2 = regexMatcher.group(2);
}
在本例中,文本“Michael Jackson”将被单个空格字符分割。最终结果将是一个字符串数组,其元素为“Michael”和“Jackson”是的,但如果我认为任何单词之间有多个空格,则匹配程序将失败,或者它将捕获“Michael Jackson live”而不是“Michael Jackson”。我已调整了模式,以便单词之间的多个空格不会阻止您进行匹配。我不认为它会捕捉到“迈克尔杰克逊现场”,如果只是因为模式明确匹配“或”之前的单词。嗯。。。虽然您可以做这类事情,但我希望您认识到,使用正则表达式从自然语言中提取信息将为您提供有限且脆弱的解决方案。如果你想要一个健壮的解决方案,你需要研究自然语言解析技术。