我需要过滤给定的文本以获取所有单词,包括撇号(不能认为是单个单词)。
Para = "'hello' world '"
我正在使用拆分文本
String[] splits = Para.split("[^a-zA-Z']");
预期产量:
hello world
但它给:
'hello' world '
除了上面的正则表达式没有过滤单个撇号(')和'hello'之外,我一切都很好。
如何过滤这两件事?
据我所知,您正在寻找'
下一个或上一个字符不是字母的地方。
我想出的正则表达式可以做到这一点,包含在一些测试代码中:
String str = "bob can't do 'well'";
String[] splits = str.split("(?:(?<=^|[^a-zA-Z])'|'(?=[^a-zA-Z]|$)|[^a-zA-Z'])+");
System.out.println(Arrays.toString(splits));
解释:
(?<=^|[^a-zA-Z])'
-匹配'
前一个字符不是字母的字符,或者我们在字符串的开头。
'(?=[^a-zA-Z]|$)
-匹配'
下一个字符不是字母的字符,或者我们在字符串的末尾。
[^a-zA-Z']
-不是字母或字母'
。
(?:...)+
-以上任何一项或多项(?:
仅是为了使其成为一个非捕获组)。
见这为更多的正则表达式环视((?<=...)
和(?=...)
)。
简化:
可以使用负向外观将正则表达式简化为以下内容:
"(?:(?<![a-zA-Z])'|'(?![a-zA-Z])|[^a-zA-Z'])+"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句