用于模式替换的 Java 正则表达式 - 特殊字符和大小写更改为空格

Posted

技术标签:

【中文标题】用于模式替换的 Java 正则表达式 - 特殊字符和大小写更改为空格【英文标题】:Java regex for pattern replace - special char and case change to whitespace 【发布时间】:2021-06-16 21:57:19 【问题描述】:

我正在为我们的一个用例尝试 Elasticsearch 的 pattern char filter。它使用 java 正则表达式。

我想用空格替换任何大小写更改或任何特殊字符。文档中有一些很好的例子。但是,我正在寻找一种可以完成替换工作的字符过滤器。

我一直在不同的博客中打破我的头,但没有运气:) 非常感谢这方面的任何帮助。

用空格替换任何大小写更改或任何特殊字符

例子:

Input: ***IsAwesome
Output: Stack Over Flow Is Awesome

Input: stack_over_flow_is_awesome
Output: stack over flow is awesome

Input: stack-over-flow-is-awesome
Output: stack over flow is awesome

Input: stack#over#flow#is#awesome
Output: stack over flow is awesome

..... any special char based inputs

**this one is good, if it is possible**
Input: ***IsAwesome
Output: STACK Over Flow Is Awesome

我正在使用以下 2 个字符的过滤器:

          "char_filter": 
            "case_char_filter": 
              "type": "pattern_replace",
              "pattern": "(?<=\\pLower)(?=\\pUpper)",
              "replacement": " "
            ,
            "special_char_filter": 
              "type": "pattern_replace",
              "pattern": "[^a-zA-Z0-9]",
              "replacement": " "
            

【问题讨论】:

不清楚您的问题是什么-您是否要替换elasticsearch?或者替换它的算法或者只是写一个java正则表达式?或者您是否正在为编写什么正则表达式来匹配特定情况而苦苦挣扎?也许也发布您期望的输入和输出。 @MrR 感谢您指出这一点。我已经添加了示例。 其中一些是相当直接和通用的......即用空格 String.replaceAll("-", " "); 替换 -。第一个是什么意思 - 在骆驼案例词上分开?最后一个不只是拆分,您希望它也使所有内容都小写吗? 更正了最后一个。不寻找 java 函数 :) 需要正则表达式来解决这些问题。因为 ES 在它的过滤器中需要正则表达式。 啊,我知道您想要 ES 配置来执行这些示例之一(或所有这些示例)? 【参考方案1】:

你不会设置一些 char_filters 吗?

问题PatternReplaceCharFilter上的链接显示了一个示例-

          "type": "pattern_replace",
          "pattern": "(\\d+)-(?=\\d)",
          "replacement": "$1_"

字符串格式为java源字符串格式(必须双引号\)。要替换 _-# 设置正则表达式 "[_-#]+",并替换为 " "。给出了一个例子,表明它重复应用。

或使用MappingCharFilter - 尽管它会将stack--overflow 转换为stack overflow(即与破折号相同的nof 空格)。

骆驼案例场景可能类似于文档中的示例-

          "pattern": "\b([A-Z])",
          "replacement": " $1"

【讨论】:

查看java.lang.Pattern for X|Y Either X or Y 合并两个案例。 我正在使用相同的 ES ReplaceCharFilter。 X|Y 是我需要的,现在正在工作。我正在使用(?&lt;=\\pLower)(?=\\pUpper)|[^a-zA-Z0-9]|(?&lt;=\\pAlpha)(?=\\pDigit)。为偶数添加。

以上是关于用于模式替换的 Java 正则表达式 - 特殊字符和大小写更改为空格的主要内容,如果未能解决你的问题,请参考以下文章

Java正则表达式入门

Java 正则简单用法

Java正则表达式基础学习

Java正则表达式基础学习

java中正则表达式基本用法

Java正则表达式