2017-03-03 61 views
-2

我有一個文檔處理應用程序,它僅通過XML進行配置。我可以指定搜索正則表達式來查找圖像上的某些內容,如果找到則返回。例如,要查找6位數的發票號碼,我要求[\ d] {6}並返回該號碼。真的很直接。不過,我有一個特定的發票號碼,其中6位數字是分開的('1 2 3 4 5 6')。Pure RegEx刪除空格

[\d\s]{6,12}拿起空格的字符串。如果我不查找空格,它不匹配,所以它不會返回任何內容。 Freespacing也不會返回任何東西。

我已閱讀並嘗試了一些其他答案herehere,但這些建議無效。由於我無法訪問代碼,因此我也不能寫任何替換。

是不是有一種簡單的方法來搜索和替換相同的正則表達式? (我知道...這是一個搜索,因此按照定義,它匹配它發現......剛剛運行的想法)

+1

http://stackoverflow.com/editing-help –

+0

正則表達式可以匹配一個字符串與2位數與4到10之間的空間:0 – jace

+0

類似於((\ d \ s?){6}'? – sideroxylon

回答

1

報價:[\d\s]{6,12}拿起與空間的字符串。如果我不查找空格,它不匹配,所以它不會返回任何內容。 Freespacing也不會返回任何東西。

小心,那是什麼,這樣的設計做的,它是在這裏工作只是巧合。你也可以得到未知的比賽,比如12個空格,12個數字,4個數字和2個空格,3個數字和6個空格。 {6是量詞範圍的下限,12}是上限。 \s還包含任何空格字符,因此各種各樣的newine,表單提要和選項卡可以是您的字符串。

Freespacing是完全不同的東西,它只會使您的正則表達式中的空白字符不相關,這樣您就可以以更易讀的格式進行書寫。

不知道更多,找到你的匹配最好的正則表達式可能是這樣的,因爲它是很清楚的閱讀。您需要爲此關閉freespacing

  • (?:(\d) (\d) (\d) (\d) (\d) (\d))this引用組$1$2$3$4$5$6
    • 對於剛剛搜索,你可以做\d \d \d \d \d \d
  • 或用freespacing (?:(\d)[ ](\d)[ ](\d)[ ](\d)[ ](\d)[ ](\d))

(\d\s){6}也將匹配您的pattern--如果有一個尾隨的spac e,其中\s取決於風味,幾乎是任何whitespace字符(用於分組的圓括號,而不是用於字符類的方括號),但不適用於替換操作。

即使(\d\s?){6},正如註釋中所引用的那樣,即使沒有空格,也存在允許使用6位數字符串(例如235211)的缺陷。這是因爲?在這種情況下意味着0 or 1 times, as many times as possible。所以如果它在那裏,就抓住它,如果沒有,就不要理它。鑑於源的設計,這個正則表達式可以作爲一個簡單的查找解決方案(?:\d\s(?:\s|$))其中(?:\s|$)意味着whitespace character, or if that's not present end of string/line取決於標誌。

+1

謝謝,@ Regular-joe。這很好。 – ToshiBoy