需要java正则表达式来匹配子字符串与多个空格,只有一个标点符号
问题描述:
我想确保我匹配的子字符串只有一个可能的标点符号和必要的空白。这是一个更长的正则表达式内,目前有什么有如下:需要java正则表达式来匹配子字符串与多个空格,只有一个标点符号
[\ p {P} \ S]
,但将匹配所有的标点和空格,使之接受:
之前的字符串,,,, ,,,。 .... 之后的字符串,当我希望它匹配的是字符串之前和字符串之间的任意数量的空白,只允许一个标点符号项 - 注意标点符号可以在字符串的开头最后,或者在之前或之后使用尽可能多的空白。
答
什么,我希望它匹配是空白的任何金额之前的字符串和后面的字符串之间,只允许一个
试试这个标点符号的项目:
\s*\p{P}\s*
说明:
\s* Match any amount of whitespace \p{P} Match a single punctuation character \s* Match any amount of whitespace
请注意,在Java字符串文字中,反斜杠需要逃跑。
答
哎呀,我想我找到了自己 - 无论如何,似乎有空格和标点的各种组合的工作:前后加号是该字符串的其余部分之后
+(\s*)+(\p{P})?+(\s)+
与零件被匹配。
答
是的,你说得这是多余的
应该
\s*(\p{P})?\s
基本相同,你放什么,但必须符合“一个可能的一块标点符号的”不是一个需要一块标点。加号表明它是一个较长的正则表达式的一部分...
第一个''是指在正则表达式的这部分之前的其他东西,不应该包含在这个答案的一部分中。 '(\ s *)+'是多余的 - 您应该使用'\ s *'。 '?'表示标点符号是可选的。 – 2010-05-03 11:03:55
仔细看看你的答案,我认为你误解了'+'的作用。 'a + b'并不意味着'a跟着b'。它意味着'一个或多个a后跟一个b'。 – 2010-05-03 11:07:26