2010-09-21 24 views
65

如何在一條線上如何在網上搜索了的單詞之間的多個空格出現

1. this is a line containing 2 spaces 
2. this is a line containing 3 spaces 
3. this is a line containing multiple spaces first second three four 

這個正則表達式上述所有有效匹配搜索的詞之間的多個空格出現。我應該使用哪種正則表達式?

+0

你們是不是要檢查的連續空格或所有空格在該行? – 2010-09-21 09:14:53

+0

連續的空白不是所有的空格 – Sam 2010-09-21 09:22:19

+1

你是什麼意思的「之間的話」?在你的兩個例子中,一個單詞和一個數字之間有多個空格。標點符號是什麼(例如,你想在一個點之後和下一個單詞之前匹配多個空格)?一行中最後一個字符前後的空格是什麼?你也想匹配標籤嗎?那些除了空白之外什麼都沒有的線呢? – 2010-09-21 11:35:35

回答

105
[ ]{2,} 

SPACE(2個或更多)

你也可以查看之前和那些空間的話跟從。 (如製表符或換行沒有其他空格)

\w[ ]{2,}\w 

一樣的,但你也可以選擇(捕獲)只有空間的任務,如更換

\w([ ]{2,})\w 

或看到之前和之後的空間有是什麼,不僅是單詞字符(除空格)

[^\s]([ ]{2,})[^\s] 
+1

'\ w'表示'單詞字符',即字母數字和下劃線,但不包含其他非空格字符。要檢查非空白,使用'\ S'(大寫字母S)。此外,第一個將只匹配包含兩個或更多空格的行,而不包含其他任何內容。 – tdammers 2010-09-21 09:19:51

+0

我試圖發展這個問題。我明白我錯過了你用'\ S'說的話,我只是不想依賴字符大小寫來獲得這樣的功能,它更容易閱讀。 – AlexanderMP 2010-09-21 09:22:49

+1

你爲什麼使用錨?他正在尋找嵌入線路中的空間。 – 2010-09-21 09:43:01

7

簡單的解決方案:

/\s{2,}/ 

這匹配一個或多個空格字符的所有匹配項。 如果您需要將整行匹配,但只有當它包含兩個或多個連續的空格字符:

/^.*\s{2,}.*$/ 

如果空格不需要是連續的:

/^(.*\s.*){2,}$/ 
+0

'。*'通常是貪婪的,這意味着它會到達被測試字符串的末尾,並且如果有必要的字符,則後面的全部都不匹配。通常在這種情況下,添加'?'是一種很好的做法,就像'。*?'。它發生在我身上使用PHP的PCRE – AlexanderMP 2010-09-21 09:35:34

+0

它確實匹配。 「貪婪」意味着它儘可能匹配,同時仍然與整個模式相匹配。 '/^.* b。* $ /'確實符合'「foobar」',即使您希望第一個貪婪的'。*'匹配整個字符串。 – tdammers 2010-09-21 10:10:18

2

搜索[ ]{2,} 。這將在該行內的任何位置找到兩個或更多個相鄰空間。它也將匹配前後空格以及完全由空格組成的行。如果你不想那樣,看看亞歷山大的答案。其實,你可以省略括號,它們只是爲了清楚(否則空間字符重複是不是很好的可見:))。

\s{2,}的問題是,它也將匹配在Windows文件換行符(其中換行符被CRLF\r\n這是由\s{2}匹配表示。

如果你也想找到多個標籤和空格,使用[ \t]{2,}

+0

'一行中的單詞之間有多於一個空格。單詞之間的[] {2,}如何?你甚至讀過這個問題嗎? – AlexanderMP 2010-09-21 10:02:51

+0

這就是爲什麼我已經提到你的答案,以防OP真的想要像他寫的那樣嚴格。也許我們應該問他。 – 2010-09-21 11:32:00

0

這裏是我的解決方案

[^0-9A-Z,\n] 

這將刪除所有的數字,逗號和新線,但選擇粗粉樂空間,例如數據集的

  • 20171106,16632 ESCG0000018SB
  • 20171107,280 ESCG0000018SB
  • 20171106,70476 ESCG0000018SB
相關問題