我需要提取字符串中不是引号的所有数字,而不是变量名的一部分。
在示例中,我有以下代码:
const VariableA1 = '5;0;5;5;0;5;3;3;7;7';
const M65 = true;
type MyType = record
H: array[0..27] of integer;
S: integer;
end;
function B(sep: Char) : integer;
var i: integer;
begin
i:= 1;
return sep[0];
end;
我自己解决了,这是代码:
(?<![a-zA-Z])[0-9]+(?=([^']*'[^']*')*[^']*$)
但是regex101抛出超时错误 - 灾难性的回溯。 对此模式的评估为8秒。
有更好的方法吗?你能帮我优化这种模式吗?
答案 0 :(得分:1)
\b[0-9]+(?=(?:[^']*'[^']*')*[^']*$)
你可以简单地使用它。参见演示。
https://regex101.com/r/gT6vU5/4
对于更快的方法,您可以使用
\b[0-9]+(?=(?>(?:[^']*'[^']*')*)[^']*$)
^^
利用原子团。参见演示。
https://regex101.com/r/gT6vU5/6
编辑:
如果您确定引号不跨越多行,则可以使用
\b[0-9]+(?![^\n]*')
参见演示。
答案 1 :(得分:0)
你也可以试试这个:
\*{1,}\d+\*{1,}