2017-09-25 106 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',但是.. –