用正则表达式Java(包括标点符号)查找两个连续的单词/字符串



我想检查一个字符串是否包含两个单词/字符串以特定的顺序直接跟随。标点符号也应该包含在单词/字符串中。(即"word""word")。应该作为不同的词处理。

例如:

    String word1 = "is";
    String word1 = "a";
    String text = "This is a sample";
    Pattern p = Pattern.compile(someregex+"+word1+"someregex"+word2+"someregex");
    System.out.println(p.matcher(text).matches());

这应该打印出true

使用以下变量,它也应该输出true。

    String word1 = "sample.";
    String word1 = "0END";
    String text = "This is a sample. 0END0";

但是当设置word1 = "sample"(不带标点符号)时,后者应该返回false。

有没有人知道regex字符串应该是什么样的(即我应该写什么而不是"someregex"?)

谢谢!

看起来你只是在空格上分割,试试:

Pattern p = Pattern.compile("(\s|^)" + Pattern.quote(word1) + "\s+" + Pattern.quote(word2) + "(\s|$)");

解释

(\s|^)匹配第一个单词之前的任何空白,或者字符串

的开头。

\s+匹配单词

之间的空白

(\s|$)匹配第二个单词之后的任何空白,或者字符串

的结尾。

Pattern.quote(...)确保输入字符串中的任何regex特殊字符都是正确的转义。

您还需要调用find(),而不是match()match()只会在整个字符串匹配模式时返回true。

完整的示例

String word1 = "is";
String word2 = "a";
String text = "This is a sample";
String regex =
    "(\s|^)" + 
    Pattern.quote(word1) +
    "\s+" +
    Pattern.quote(word2) + 
    "(\s|$)";
Pattern p = Pattern.compile(regex);
System.out.println(p.matcher(text).find());

您可以用空格连接两个单词并将其用作regexp。你唯一要做的就是用"。"替换"。",这样这个点就不会匹配成任何字符了。

String regexp = " " + word1 + " " + word2 + " ";
regexp = regexp.replaceAll("\.", "\\.");

相关内容

  • 没有找到相关文章

最新更新