使用正则表达式从不以注释符号开头的行中提取数字

时间:2018-11-28 17:01:49

标签: regex negative-lookahead

我正在尝试替换注释部分中未列出的所有数字。这是要修复的文件的示例:

/* 2018-01-01 06:00:55 : realtime(0.002) --status(10)-- ++numretLines(0)++  --IP(192.168.1.5) PORT(22)-- queryNo(2)  comment[TO: Too much time]  TYPE[QUERY 4.2]  */
select count(*) from table where id1 = 41111 and id2 = 221144
GO

基本上,我想替换不以"/*"开头的字符串中的数字。

我想出了以下正则表达式:/^(?!\/\*)(?:.+\K(\d+?))/gmU

但是我只能提取每行的第一个数字,而不以"/*"开头。我如何扩展它以获取那些行的所有数字?

谢谢!

2 个答案:

答案 0 :(得分:0)

假设您的正则表达式引擎(尚未告知)支持look behindlook ahead,则可以使用此正则表达式:

(?<!^\/\*.*)(?:(?<=\s)\d+(?=\s))+

正则表达式开始于使用negative look behind,寻找start of line,然后是slashstar

然后,它为negative look behind创建一个新的White Space,然后创建任意数量的digits,然后为negative look ahead创建一个White Space。该组为repeated any number of times

您需要设置global'multiline'标志。

regex会跳过不被空格包围的数字(例如'id1'

答案 1 :(得分:0)

基于Wiktor Stribiżew的评论,我使用\/\*.*?\*\/(*SKIP)(*F)|-?\b\d+(\.\d+)?提取了数字,包括小数和负值。