2017-09-25 75 views
1

我想對字符串做一些驗證。正則表達式只搜索字符串的一部分

Y0 40 98 86 A 

我希望能夠取代它發生0的前2個字符,即Y0帶O的。

我知道該怎麼做替換一部分,但我在努力只是選擇第一0

應該說前兩個字符內匹配全0。即000Z

爲了澄清,我不介意,我只是需要什麼語言幫助使正則表達式選擇

回答

1

一步法更換

感謝@Rawing的評論:

"00 40 98 86 A".gsub(/^0|(?<=^.)0/, 'O') 
# "OO 40 98 86 A" 

正則表達式表示:

  • 開始e字符串,後跟:
    • 零或
    • 一個字符,後跟一個零。

另一變型由@SebastianProske:

"A0 40 98 86 A".gsub(/(?<!..)0/, 'O') 
# "AO 40 98 86 A" 

這意味着:a 0, but only when not preceded by two characters

這是test

兩步替換

這可能更容易分兩步進行。如果是0,則用O替換第一個字符,如果是0,則替換第二個字符。

這裏有一個匹配組紅寶石例如:

"Y0 40 98 86 A".sub(/^0/,'O').sub(/^(.)0/,'\1O') 
# "YO 40 98 86 A" 

你也可以使用一個回顧後:

"Y0 40 98 86 A".sub(/^0/,'O').sub(/(?<=^.)0/,'O') 
=> "YO 40 98 86 A" 
+0

是的,我怕這可以得出這樣的,雖然這將是最好選擇他們都在一個。 – Liably

+1

爲什麼不把這兩個正則表達式合併成一個正則表達式? '/^0 |(?<= ^。)0 /' –

+0

使用lookbehinds可以使用'(?<!..)0',但是.. –

相關問題