如何忽略“ - ”而不是“ - ”

时间:2013-10-12 17:37:42

标签: java regex delimiter

我在Java中使用useDelimiter方法忽略除-之外的所有非字母。这是因为-用于绑定像"three-legged"这样的单词。问题是--在单词之前和之后的文本中多次出现。所以我想忽略所有--,而不是-

到目前为止,这是我的正则表达式模式:useDelimiter("[[^a-zA-Z&&[^'-]&&\\s]+");

编辑:解决了!这就是我做的: useDelimiter("[[^a-zA-Z&&[^'&&[^-{1}]]]\\s]+"); - 对此正则表达式的任何改进都将很高兴。

双重编辑 - 我没有解决它。但是JERRY看到他的回应是否得到了正确的回答

2 个答案:

答案 0 :(得分:1)

我认为你的正则表达式有点奇怪。本身没有交叉点(在修复丢失的]之后):

[[^a-zA-Z]&&[^'-]&&\\s]

[^a-zA-Z][^'-]的交集与[^a-zA-Z'-]相同,与\\s的交叉仅提供\\s

也许你的意思是:

useDelimiter("[^a-zA-Z'-[\\s]]+");

然后,如果我在你的正则表达式上构建,你可以使用替换组和非捕获组添加--

useDelimiter("(?:[^a-zA-Z'-[\\s]]|--)+");

示例字符串:

Hello! World! Seems that... -- Hey! That's my three-legged table!

将分裂为:

Hello
World
Seems
that
Hey
That's
my
three-legged
table

ideone demo

编辑:您当前正则表达式的修改可能是:

(?:[[^a-zA-Z&&[^'&&[^-]]]\\s]|--)+

答案 1 :(得分:0)

我不是Java专家,但你的正则表达式没有问题。

 [  <-- Unbalanced  '['
 [^a-zA-Z&&[^'-]&&\s]+