java - 用于模式替换的 Java 正则表达式 - 特殊字符和大小写更改为空格
问题描述
我正在为我们的一个用例尝试 Elasticsearch 的模式字符过滤器。它使用 java 正则表达式。
我想用空格替换任何大小写更改或任何特殊字符。文档中有一些很好的例子。但是,我正在寻找一种可以完成替换工作的字符过滤器。
我一直在不同的博客中打破我的头,但没有运气:) 非常感谢这方面的任何帮助。
用空格替换任何大小写更改或任何特殊字符
例子:
Input: StackOverFlowIsAwesome
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: STACKOverFlowIsAwesome
Output: STACK Over Flow Is Awesome
我正在使用以下 2 个字符过滤器:
"char_filter": {
"case_char_filter": {
"type": "pattern_replace",
"pattern": "(?<=\\p{Lower})(?=\\p{Upper})",
"replacement": " "
},
"special_char_filter": {
"type": "pattern_replace",
"pattern": "[^a-zA-Z0-9]",
"replacement": " "
}
解决方案
你不会设置一些 char_filters 吗?
问题PatternReplaceCharFilter上的链接 显示了一个示例-
"type": "pattern_replace",
"pattern": "(\\d+)-(?=\\d)",
"replacement": "$1_"
字符串格式是java源字符串格式(必须双引号\
)。替换_
或-
或#
设置正则表达式"[_-#]+"
,并将替换为" "
. 给出了一个例子,表明它反复应用。
或使用MappingCharFilter - 尽管它会转换stack--overflow
为stack overflow
(即与破折号相同的非空格)。
骆驼案例场景可能类似于文档中的示例 -
"pattern": "\b([A-Z])",
"replacement": " $1"
推荐阅读
- ruby-on-rails-6 - 我是否需要继续构建我的模型,直到控制器和视图或创建另一个模型来创建每个模型的关联?
- php - 将文件存储在 s3 存储桶中 Laravel
- mysql - 如何将“UPPER”应用于 Eloquent 查询?
- javascript - 打印查询 - graphql 打印机
- ios - CoreData 未显示查询条件
- python - 使用深度优先搜索在 python 中遍历二维列表
- racket - 如何将列表的第一个元素应用于列表的其余部分?
- apache-spark - 使用 Group By 结束 Spark 窗口的问题
- python - 如何在 Python3 中生成堆积条形图?
- css - 带有 id 的表在 css 上不显示 td 和 tr 周围的边框