如何使用正则表达式提取所有不在引号中的数字?

时间:2015-10-21 09:09:40

标签: c# regex

我需要提取字符串中不是引号的所有数字,而不是变量名的一部分。

在示例中,我有以下代码:

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秒。

有更好的方法吗?你能帮我优化这种模式吗?

2 个答案:

答案 0 :(得分:1)

\b[0-9]+(?=(?:[^']*'[^']*')*[^']*$)

你可以简单地使用它。参见演示。

https://regex101.com/r/gT6vU5/4

对于更快的方法,您可以使用

\b[0-9]+(?=(?>(?:[^']*'[^']*')*)[^']*$)

           ^^

利用原子团。参见演示。

https://regex101.com/r/gT6vU5/6

编辑:

如果您确定引号不跨越多行,则可以使用

\b[0-9]+(?![^\n]*')

参见演示。

https://regex101.com/r/gT6vU5/5

答案 1 :(得分:0)

你也可以试试这个:

\*{1,}\d+\*{1,}