【发布时间】:2013-01-18 16:44:23
【问题描述】:
我们目前在 Java 的 replaceAll 函数中使用 [^a-zA-Z0-9] 从字符串中去除特殊字符。我们注意到,当连字符与数字混合时,我们需要允许它们。
连字符不会匹配的示例:
- 1-2-3
- -1-23-4562
- --1---2--3---4-
- --9--a--7
- 425-12-3456
将匹配连字符的示例:
- --a--b--c
- 沃尔玛
我们认为我们使用 this SO question 作为参考制定了一个正则表达式来满足后一个标准,但我们不知道如何将它与原始正则表达式 [^a-zA-Z0-9] 结合起来。
由于Lucene's standard tokenizer 在索引时的工作方式,我们希望对 Lucene 搜索字符串执行此操作:
在连字符处拆分单词,除非标记中有数字,在这种情况下,整个标记被解释为产品编号并且不分割。
【问题讨论】:
-
我根据正则表达式标签的文档添加了 [java] 标签:“请同时包含一个标签,指定您正在使用的编程语言或工具。”
-
连字符只能与数字结合使用?所以 '--9--a--7' 会去掉连字符,但会留下 '--9--0--7' 吗?
-
我相信这两个例子都会被搁置,因为 Lucene 引用指出,如果令牌中有数字,分词器不会拆分连字符。
-
所以 '--9--a--7' 和 '--9--0--7' 会被单独留下,而不是 '--a--b--c' ?
-
是的,完全正确。