2010-05-03 91 views
4

我想确保我匹配的子字符串只有一个可能的标点符号和必要的空白。这是一个更长的正则表达式内,目前有什么有如下:需要java正则表达式来匹配子字符串与多个空格,只有一个标点符号

[\ p {P} \ S]

,但将匹配所有的标点和空格,使之接受:

之前的字符串,,,, ,,,。 .... 之后的字符串,当我希望它匹配的是字符串之前和字符串之间的任意数量的空白,只允许一个标点符号项 - 注意标点符号可以在字符串的开头最后,或者在之前或之后使用尽可能多的空白。

回答

9

什么,我希望它匹配是空白的任何金额之前的字符串和后面的字符串之间,只允许一个

试试这个标点符号的项目:

\s*\p{P}\s* 

说明:

 
\s* Match any amount of whitespace 
\p{P} Match a single punctuation character 
\s* Match any amount of whitespace 

请注意,在Java字符串文字中,反斜杠需要逃跑。

0

哎呀,我想我找到了自己 - 无论如何,似乎有空格和标点的各种组合的工作:前后加号是该字符串的其余部分之后

+(\s*)+(\p{P})?+(\s)+ 

与零件被匹配。

+2

第一个''是​​指在正则表达式的这部分之前的其他东西,不应该包含在这个答案的一部分中。 '(\ s *)+'是多余的 - 您应该使用'\ s *'。 '?'表示标点符号是可选的。 – 2010-05-03 11:03:55

+0

仔细看看你的答案,我认为你误解了'+'的作用。 'a + b'并不意味着'a跟着b'。它意味着'一个或多个a后跟一个b'。 – 2010-05-03 11:07:26

0

是的,你说得这是多余的

应该

\s*(\p{P})?\s 

基本相同,你放什么,但必须符合“一个可能的一块标点符号的”不是一个需要一块标点。加号表明它是一个较长的正则表达式的一部分...

相关问题