Regex to validate words do not contain numbers or special characters

时间:2017-03-22 18:52:44

标签: java regex

I am developing a java app, running on android. I am trying to pick all words which do not contain any embedded digits or symbols.

The best I have come up with is:

\b[a-zA-Z]+[a-zA-Z]*+\b

Test Data:

this is a test , an0ther gr8 WW##ee one, w1n 1test test1 end

This results in picking the following: this, is, a, test, WW##ee, one, end

I need to eliminate the WW##ee from the results.

3 个答案:

答案 0 :(得分:1)

你不应该使用单词边界元字符\b,因为它匹配WW后面看到散列#字符的位置。这个位置本身就是一个单词边界。所以你应该采用不同的方式:

(?<![\S&&[^,]])[a-zA-Z]+(?![\S&&[^,]])

使用Java正则表达式的字符类交集功能,您可以定义允许在单词字符后面或前面的标点字符。这是逗号,

答案 1 :(得分:0)

你可以使用后面的观察并向前看以检查没有#

\b(?<!\#)[a-zA-Z]+(?!\#)\b

答案 2 :(得分:0)

我的解决方案已经发展了一点,因为我已经获得了额外的帮助。所以,这是我最好的解决方案,但仍然有点缺乏。在拒绝“-this-”时,我无法接受“原样”,并且在拒绝“/ slash /”时接受“和/或”的类似情况。同样为简单起见,我已经使输入数据每行单个字。

^(:[\ p {P} \ p {S}])的((?:[\ p {L} \ p {PD}'])+)?(?:[\ p {P} \ p {S}]) $

as-is被选中有效

- 这是有效的,但我希望它不是

和/或无效但我希望它会被选中

/ slash /“slash”被选中有效

(测试)“测试”被选中有效

[test]“test”被选中有效

&LT;试验&gt; “测试”被选中有效