使用正则表达式从不以注释符号开头的行中提取数字
Extract numbers from line not starting with comment symbol using regex
我正在尝试替换所有不在评论部分的数字。这是要修复的文件示例:
/* 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
但我只能提取不以 "/*"
开头的每一行的第一个数字。我如何扩展它以获得这些行的所有数字?
谢谢!
假设您的正则表达式引擎(您尚未告知)支持 look behind
和 look ahead
,您可以使用此正则表达式:
(?<!^\/\*.*)(?:(?<=\s)\d+(?=\s))+
正则表达式首先使用 negative look behind
,查找 start of line
,然后是 slash
和 star
。
然后它为 White Space
创建一个新的 negative look behind
,然后是任意数量的 digits
,然后是 negative look ahead
的 White Space
。该组是 repeated any number of times
。
您需要设置 global
和 'multiline'
标志。
正则表达式跳过未被白色包围的数字 Space(例如 'id1'
)
根据Wiktor Stribiżew评论,我使用\/\*.*?\*\/(*SKIP)(*F)|-?\b\d+(\.\d+)?
提取数字,包括小数和负值。
我正在尝试替换所有不在评论部分的数字。这是要修复的文件示例:
/* 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
但我只能提取不以 "/*"
开头的每一行的第一个数字。我如何扩展它以获得这些行的所有数字?
谢谢!
假设您的正则表达式引擎(您尚未告知)支持 look behind
和 look ahead
,您可以使用此正则表达式:
(?<!^\/\*.*)(?:(?<=\s)\d+(?=\s))+
正则表达式首先使用 negative look behind
,查找 start of line
,然后是 slash
和 star
。
然后它为 White Space
创建一个新的 negative look behind
,然后是任意数量的 digits
,然后是 negative look ahead
的 White Space
。该组是 repeated any number of times
。
您需要设置 global
和 'multiline'
标志。
正则表达式跳过未被白色包围的数字 Space(例如 'id1'
)
根据Wiktor Stribiżew评论,我使用\/\*.*?\*\/(*SKIP)(*F)|-?\b\d+(\.\d+)?
提取数字,包括小数和负值。