我认为我有一个很好的正则表达式来限制输入到TextBox中的单词数量,但是我发现,当文本中有标点符号时它会失败。
如何修改此正则表达式(或使用另一个正则表达式),正确计算可能由多个句子组成或包含其他符号的单词?
^(?:\b\w+\b[\s\r\n]*){1,10}$
这会将单词限制为10。
答案 0 :(得分:0)
我认为这是可行的唯一方式。
如果它存在,我希望看到更好的方法。
(需要原子组)
对于Unicode:
^\s*(?>[^\pL\pN]*[\pL\pN](?:[\pL\pN_-]|\pP(?=[\pL\pN\pP_-])|[?.!])*\s*){1,10}$
解释
^
\s*
(?>
[^\pL\pN]* [\pL\pN] # Not letters/numbers, followed by letter/number
(?:
[\pL\pN_-] # Letter/number or '-'
|
\pP # Or, punctuation if followed by punctuation/letter/number or '-'
(?= [\pL\pN\pP_-] )
|
[?.!] # Or, (Add) Special word ending punctuation
)*
\s*
){1,10}
$
对于Ascii:
^\s*(?>[\W_]*[^\W_](?:\w|[[:punct:]_-](?=[\w[:punct:]-])|[?.!])*\s*){1,10}$
扩展
^
\s*
(?>
[\W_]* [^\W_]
(?:
\w
|
[[:punct:]_-]
(?= [\w[:punct:]-] )
|
[?.!]
)*
\s*
){1,10}
$