我正在用Java编写一个正则表达式,用于捕获没有空格的单词。
这个词只能包含字母,数字,连字符和点。
字符集[\w+\-\\.]
效果很好。
现在我想编辑该集以允许点后面的单个空格。
我如何编辑正则表达式?
答案 0 :(得分:0)
如果一个点后跟一个空格,我想这个模式既不应该是匹配字符串中的第一个也不是最后一个?您可能希望将其括在单词边界\b
:
([0-9A-Za-z-]|\b\.( \b)?)+
我故意不使用\w
来排除下划线。
答案 1 :(得分:0)
您可以添加符合此附加要求的alternation
([\w\-.]|(?<=\.) )+
(?<=\.)
是lookbehind assertion。它确保空间仅匹配,如果它前面有一个点。
其他提示:
\w
包含下划线,并且每个默认值仅匹配ASCII字母/数字。如果您关心Unicode,请使用修饰符UNICODE_CHARACTER_CLASS
为\w
启用Unicode,或使用Unicode properties \p{L}
和\p{Nd}
匹配Unicode字母和数字。
您无需在字符类中转义点。
你的角色类中有\w+
,你知道吗,你只是在接受的角色中加上“+”字符?
答案 2 :(得分:0)
为了在点之后只允许一个空格,你可以使用这个正则表达式:
^(?!.*?\. {2})[\w.-]+$
(?!.*?\. {2})
是一个负面的前瞻,在点