我对Regex并不擅长并且整个上午一直在努力实现以下目标:
我希望在保存到数据库之前在SQL字符串中找到unicode字符,即“\ 00026”并转义为“\”,将其替换为“\”,除非它已经有两个“\”字符。
\\(?=[0])(?<![\\])
我写的是什么,据我所知:
find the "\" character, positive look ahead for a "0", and look behind to check it isn't preceded by a "\"
但它不起作用,所以很明显我误解了!
我可以将其缩短为\\(?=[0])
然后我在0之前得到“\”,即使它之前是另一个“\”
那我该怎么做:
Replace("\00026", "regex", "\\") to get "\\00026"
AND ensure that
Replace("\\00026", "regex", "\\") also gives "\\00026"
所有人都非常感谢!
编辑:
这必须解析整个字符串并替换所有出现,而不仅仅是第一次出现 - 只是为了清楚。如果它有很大的不同,我也在使用VB.net。
答案 0 :(得分:1)
让我解释为什么你的正则表达式不起作用。
\\
- 匹配\
(?=[0])
- 检查(不匹配)下一个字符是0
(?<![\\])
- 如果前面的字符(\
)不是\
,则检查(但不匹配)。最后一个条件将始终无法匹配,因为\
为\
。所以,没有多大意义,对吧?
如果您想匹配/
整个字符串中的/000xx
(例如,用空格分隔),其中x
是任意数字,您可以使用
\B(?<!/)/(?!/)(?=000\d{2})
要在w/00023
等上下文中匹配字符串,您可以删除\B
:
(?<!/)/(?!/)(?=000\d{2})
如果您不关心0
s,只关心任何数字:
(?<!/)/(?!/)(?=\d)
如果您有\
(不是/
),请在上述正则表达式中将/
替换为\\
。
答案 1 :(得分:0)
您可以使用以下正则表达式:
$ awk 'gsub(/\|/,",") && gsub(/^,|,$/,"") && $3~/^,600/' file
201480 ,6001400030046472 ,6001400030046771 ,2012 ,6100202520 ,AAA2777953
202853 ,6001700000180323 ,6001700000180722 ,2012 ,6100202520 ,AAA2777953
$ awk -F, 'gsub(/\|/,",") && gsub(/^,|,$/,"") && $3~/^600/' file
201480 ,6001400030046472 ,6001400030046771 ,2012 ,6100202520 ,AAA2777953
202853 ,6001700000180323 ,6001700000180722 ,2012 ,6100202520 ,AAA2777953
并替换为(?<!/)/(?=0)
请参阅DEMO