2013-10-09 74 views
0

我設置了一個系統來解析一個非常指定語法的字符串並修復用戶錯誤。例如,語法要求在AM/d/yy的格式(沒有前導零)日期,所以我需要進行下列替換:智能RegEx替換

  • 13年10月1日 - > 13年10月1日
  • 13年10月10日 - >無變化
  • 13年10月1日 - >無變化
  • 13年1月10日 - > 13年1月10日

我有很多像這樣的規則我需要找到一個字符串部分並修復這些部分。我可以使用正則表達式來確定需要更正的問題。舉個更簡單的例子,我想找到CBUx[2-9],但是之後我需要用CBU x [2-9](如果前面是CBU,後面跟着一個數字,則是x周圍的空格)替換。例如:

輸入文字: 「等等等等CBUx3」 匹配: 「CBUx3」 取代: 「CBU×3」 輸出文本: 「等等等等CBU×3」

這是可能的?請注意,我完全知道我可以編寫代碼來查找斜槓和數字。我特意試圖用「智能RegEx替換」來做到這一點。我有很多不同類型的糾正方法可以與RegEx相匹配,並且我希望避免爲每個方法編寫特定的更正程序。

+1

智能正則表達式是什麼意思?你的意思是你想要在一個正則表達式中結合所有的規則嗎? ** P.S **我相信聰明的書面正則表達式總是很聰明! – jkshah

+1

你在用什麼語言?順便說一句,任何認爲m/d/yyyy是「智能」的系統可能已經陷入困境。更好地從僅用於一個國家的狹隘,古怪的m/d/yyyy格式轉換爲ISO yyyy/mm/dd,或世界其他地區使用的dd/mm/yyyy – Bohemian

+0

「智能」正在修改替換,而不是正則表達式。重點是我想能夠用正則表達式指定替換字符串。因此我的例子。無論您是否喜歡我在此實例中使用的日期格式(我更喜歡ISO)完全不相關。 –

回答

0

也許類似的東西爲前導零:

\b0+([1-9]) 

而且隨着$1更換(根據語言或\1,雖然\1較少見時下)。

可是,我好一點可能與使用負回顧後發的:

(?<![.,])\b0+([1-9]) 

因此,在10,001.0020不會更改爲10,1.2

regex101 demo

的字邊界,\b,可確保0(或更多)的數量和負回顧後的開始是小數和千個分隔符的情況下,假設你有有浮動數字在字符串中。請注意,這會阻止在日期格式11.01.13中刪除零。然而,一個更復雜的正則表達式可以假設這樣一個日期在第二個點之後總是有至少一個數字(本身在2個數字之後,因爲日期和月份最多隻有2位數),而不會遇到除了其他數字以外的任何其他數字,這使得正則表達式的樣子......

(?<![.,](?![0-9]{2}\.[0-9]))\b0+([1-9]) 

和渲染成類似this


CBUx[2-9],你可以使用一個捕獲組,以及:

CBUx([2-9]) 

並將其替換:CBU x $1(或\1


可能有一些調整,我沒不考慮領先的零點去除部分,但這正是我現在能想到的。

+0

謝謝 - 我在用()分組時看到的文檔並用$取代並不是很清楚(或者至少對於Regex新手來說不是這樣)。你不僅回答了我當前的問題,而且現在我明白了其基本邏輯! –

+0

@ Dr.Drew不客氣!如果你需要更多的澄清,讓我知道,我會盡力解釋我可以:) – Jerry