2017-06-18 67 views
1

我試圖用Java中的正則表達式在一些特殊字符之間至少得到一個單詞。這些都是一些樣品字符串澄清:特殊字符之間的多個單詞的正則表達式

{ ? <> <> ; <> ? ; <> ? . ? <> ? . ? <> ? . ? <> ? } 
{ <> <> ? . <> <> ? } 
{ <> <> <> } 
{ OPTIONAL { <> <> ? } FILTER (! bound(?)) } 
{ FILTER not exists (! bound(?)) } 
{ <> <> ? . ? <> ? } 
{ ? <> <> ; a <> } 
{ <> <> [email protected] } 
{ <> <> <> } 
{ <> <> ? . <> <> ? FILTER (? > ?) } 
{ <> <> ? . ? <> ? FILTER regex(? ?) } 
{ <> <> ? FILTER (! bound(?)) } 
{ ? <> ? ; <> ? . ? <> ? } 
{ ? <> ? ; <> ? . ?2 <> ? ; <> ? } 
{ ? <> <> ; <> ? . ? <> ? } 
{ <> <> ? . <> <> ? FILTER (? = ?) } 

我的比賽應該是這樣的:

OPTIONAL 
FILTER 
bound 
FILTER not exists 
bound 
... 

這是正則表達式,我拿出這麼遠:

[^\d\W\\a\@]+ 

你可以在這裏測試:https://regex101.com/r/cP3Uri/2

我的問題是,我的正則表達式只會找到完整的單詞,沒有任何工作組ds(中間有空格)。這意味着這個子字符串FILTER not exists將得到3個匹配(每個單詞一個),但我希望它只是一個匹配。

任何人都可以幫助我找到正確的正則表達式嗎?

+0

[\\ b [a-zA-Z] [a-zA-Z] + \\ b'](https://regex101.com/r/cP3Uri/6) –

+1

@Pavneet_Singh貼吧我認爲這是正確的:) –

回答

2
\w+(?:\s*\w+)* 

捕捉所有羣體,包括 'A' 且僅用於捕獲組與多個字符2字符

\w{2}(?:\s*\w+)* 

可以替換\ W用[A-ZA- Z]排除數字。

看到https://regex101.com/r/cP3Uri/7

+1

不會'\ s +'更合適嗎? '\ s'永遠不會匹配零次。 – Andreas

+0

你說得對,我認爲'\ w {2,}(?:\ s + \ w +)*'會更合適。這就是說:匹配任何帶有不止一個字符的單詞和之後用空格隔開的所有單詞。 '\ w {2}(?:\ s * \ w +)*'表示匹配前兩個字符,然後匹配後面的所有字符,即使它們被空格分隔。 – blackplant

1

您可以使用其中的一個,它尊重你的原有格局:

[^\d\W\\a\@]([^\d\W\\a\@]|)*\b 
[^\d\W\\a\@]+(+[^\d\W\\a\@]+)* 

觀看演示:12

相關問題