2010-10-26 17 views
3

我在尋找一些字的邊界,以便涵蓋三種情況:正則表達式:字的邊界,但對於空白,行或行結束的開始只有

  1. 開始串串
  2. 結束
  3. 白色空間

是否有這樣的事情,因爲\ b覆蓋也, - /等?

想通過一些上述替換\ b在這個模式:

(\b\d*\sx\s|\b\d*x|\b) 
+1

''[\ s^$]'做你需要的嗎?此外,它可能有助於告訴你正在使用哪種正則表達式引擎。 – LarsH 2010-10-26 17:17:36

+1

@LarsH:所示方括號中的插入符和美元是簡單字符,而不是元字符。 – 2010-10-26 17:30:13

+0

其實我相信在方括號裏,^只是一個不同的元字符。它取消了一個值,所以[^ f]將匹配任何東西除了「f」 – gnomed 2010-10-26 17:34:09

回答

8

好了,你的真正的問題是:

如何匹配單元,任選地由數量之前,但只有在比賽之前沒有任何東西或空間的情況下才可以。

使用

(?<!\S)\b(?:\d+\s*x\s*)?\d+(?:\.\d+)?\s*ml\b 

說明

(?<!\S):斷言,它是不可能在比賽前,以匹配非空格字符。

\b:匹配一個字邊界

(?:\d+\s*x\s*)?:任選地匹配量詞(僅整數)

\d+(?:\.\d+)?:匹配的數(小數點後可選)

\s*ml\b:匹配ml,任選由空格之前。

+0

有沒有更簡單的方法? – Marcin 2010-10-26 17:26:35

+0

也許你能解釋你真正想做什麼。你想解決什麼問題? – 2010-10-26 17:29:45

+0

我上面發佈了我的模式,只是想用這個有限的字邊界替換\ b,如果可能的話 – Marcin 2010-10-26 17:34:46

1

你用\b獲得的邊界是而不是對空白敏感。它們是與\w\W\W\w之間的轉換有關的複雜條件斷言。請參閱this answer以瞭解如何更精確地編寫錨點,以便您可以按照自己想要的方式處理空白。

16

嘗試用(?:^|\s|$)

更換\b這意味着在Python和JavaScript

 
(
    ?: don't consider this group a match 
^ match beginning of line 
    | or 
    \s match whitespace 
    | or 
    $ match end of line 
) 

爲我工作。

+0

在Javascript中,外部組包括所有內容,包括非捕獲組。使用exec()我可以得到第二組,排除非捕獲組,但我怎麼能在Javascript中的replace()中使用它? – 2013-03-15 13:35:16

+0

在.net中完美運行 - 謝謝!這正是我一直在尋找的。 (我試圖匹配空白/開始/行結束的正則表達式是不同的,但「匹配空白或開始或行結束」行爲正是我正在尋找。) – neminem 2013-10-24 14:55:55

+0

@FernandoCamargo我想圖在javascript中使用replace()的同樣的東西 – Kdawgwilk 2015-05-27 19:25:17

相關問題