2010-05-03 19 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 

基本相同,你放什麼,但必須符合「一個可能的一塊標點符號的」不是一個需要一塊標點。加號表明它是一個較長的正則表達式的一部分...

相關問題