【发布时间】:2014-11-17 22:24:08
【问题描述】:
所以我需要一个从文本中删除所有非单词字符(空格和连字符除外)的正则表达式,这样我就可以计算文本中的单词数。 像
String().replaceAll("[^\\p{L}+(?:\\-\n?\\p{L}+)* ]", "")
大部分都有效,因为它保留了连字符,但是当我得到一个双连字符时就会出现问题。美式英语中的双连字符应该代表一个破折号,所以在我的情况下,我也需要用空格替换它。有谁知道如何修改它以免发生这种情况?
这是一个例子。下面这句话:
当我在校外时,我失去了所有的财物——钱包、钥匙,一切!
在正则表达式之后应该是这样的:
当我在校外时,我丢失了我所有的财物钱包钥匙
编辑 - 我对使用两个 replaceAll 不感兴趣,我想在一个正则表达式中完成。
【问题讨论】:
-
你能举一些例子吗?
-
你为什么不做第二个
replaceAll而不是试图让正则表达式更复杂?replaceAll("-+", "-") -
例如,“校外”将不受此正则表达式的影响,这正是我想要的。但是类似于以下句子:“我失去了所有的工作——物理、数学等。”会保留双连字符,然后我会有一个像 work-physics 这样的词,这是我不想要的。我不想用两个 replaceAlls 来做的原因是因为我很好奇用一个正则表达式来做。
-
您对什么感兴趣并不重要,但不能在一个
replaceAll调用中完成 2 个不同的替换。