如何在Java中使用正则表达式匹配俄语单词?[副本]

exdqitrt  于 2023-06-04  发布在  Java
关注(0)|答案(2)|浏览(202)
    • 此问题已在此处有答案**:

Unicode equivalents for \w and \b in Java regular expressions?(3个答案)
昨天关门了。
我试着写模式找到单词"с в о й с т в а":

String k="Исследованы и проанализированы демпфирующие свойства English базовых конструкций токарных станков из композитных материалов на основе методики, базируемой на принципах модальной диагностики конструкций. Использованы первичные экспериментальные результаты из зарубежных источников и собственных исследований. Выполнен сравнительный анализ демпфирующих свойств конструкций станин токарных станков из чугуна и композитных материалов (ферроцемент, полимербетон, металлобетон).";
        if(k.toLowerCase().matches(".*\\b" + Pattern.quote("свойства") + "\\b.*") ) {
            System.out.println("Success");
         }
        else {System.out.println("Fail");}

我知道表达:\p{Cyrillic},但不知道如何将这种Unicode支持应用到我的模式中。我该怎么办?

guicsvcw

guicsvcw1#

除非你的JVM注明,大多数Java String 值都是UTF-16,所以你的文本 * 应该 * 工作。
您不需要使用 Unicode support 语法,如\p{Cyrillic}
Unicode支持语法几乎是详尽的-有几本书涵盖了这个主题。
我推荐O 'Reilly Media的 * Mastering Regular Expressions *,它详细介绍了这个主题。
由于您要查看string k 是否包含值,因此可以使用 * Pattern * 和 * Matcher * 类。
这将消除对开始和结束\b.*的需要。
如果您查看 String#matches 方法,您会发现它无论如何都会创建 PatternMatcher 的新示例来计算参数。
这里是 String#matches,它调用 Pattern#matches
要确定 string 值是否包含值,可以使用 Matcher#find 方法。
首先必须使用 Pattern#compile 方法创建一个新的 Pattern 示例。

String k="Исследованы и проанализированы демпфирующие свойства English базовых конструкций токарных станков из композитных материалов на основе методики, базируемой на принципах модальной диагностики конструкций. Использованы первичные экспериментальные результаты из зарубежных источников и собственных исследований. Выполнен сравнительный анализ демпфирующих свойств конструкций станин токарных станков из чугуна и композитных материалов (ферроцемент, полимербетон, металлобетон).";
Pattern pattern = Pattern.compile(Pattern.quote("свойства"));
Matcher matcher = pattern.matcher(k);
System.out.println(matcher.find() ? "Success" : "Fail");

输出量

Success
dfuffjeb

dfuffjeb2#

不要使用正则表达式。contains()在这种情况下可以满足您的需求:

if ((" " + k.toLowerCase().replaceAll("\\p{L}", " ") + " ").contains(" свойства ")) {

参见live demo
空格已被添加到文本(和目标)单词的每一端,以强制执行单词边界方面,并确保它在单词位于任何一端的情况下也有效。
正则表达式\P{L}匹配所有非字母(所有字符集),以处理后跟标点符号的资金单词。

相关问题