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.
答案 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; “测试”被选中有效