Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 使用正则表达式解析值_Regex - Fatal编程技术网

Regex 使用正则表达式解析值

Regex 使用正则表达式解析值,regex,Regex,我有一个取自VCF文件的长字符串,例如(出于示例目的,这些字符串被截断): 我想编写一个正则表达式来返回给定行上FAO的所有值。 FAO的有效格式为:FAO=SomeNumber或FAO=SomeNumber、SomeNumber、SomeNumber等 有没有一种方法可以编写一个正则表达式捕获组,该组同时考虑单个值和由逗号分隔的无限多个值,直到看到一个“”;” 我试过了 FAO=((([0-9]+);)|(([0-9]+),([0-9])+)) 但它最多只考虑2个数字,我需要matcher

我有一个取自VCF文件的长字符串,例如(出于示例目的,这些字符串被截断):

我想编写一个正则表达式来返回给定行上FAO的所有值。
FAO
的有效格式为:
FAO=SomeNumber
FAO=SomeNumber、SomeNumber、SomeNumber等

有没有一种方法可以编写一个正则表达式捕获组,该组同时考虑单个值和由逗号分隔的无限多个值,直到看到一个“
”;”

我试过了

FAO=((([0-9]+);)|(([0-9]+),([0-9])+))

但它最多只考虑2个数字,我需要matcher group 1作为第一个值,matcher group 2作为第二个值等等。

您可以使用这样的正则表达式

FAO=([0-9]+(,[0-9]+)*);
外圆括号允许您使用第一个匹配组提取一个或多个值

编辑

考虑到您希望使用不同的匹配组捕获单个值,这种方法将不起作用(在*内捕获组将只捕获最后一个匹配)。有关解决方案,请参阅已接受的答案

编辑2

请参阅基于该答案的pcre正则表达式示例,该正则表达式将使用相同的捕获组匹配每个数字

(?:FAO=|\G,)\K(\d+)
请注意,并非所有正则表达式样式都支持\G和\K。\G匹配上一个匹配的结尾(或字符串的开头),并且\K重置当前匹配的开头。

您可以使用:
[^;]+
来匹配任何非分号的字符。由于这是一个贪婪的匹配,它将继续,直到它看到第一个分号

var字符串=[
‘chr1 11189845 COSM462604;COSM893813 G C,T 158.16通过AF=0,0;AO=0,0;DP=1201;FAO=0,0;FDP=1201;FR=.;’,
'chr1 11190804 COSM180789 C T 134.06通过AF=0;AO=0;DP=1016;FAO=0;FDP=1018;FR=;FRO=1018;'
];
strings.forEach(函数(str){
警报(str.match(/(FAO=[^;]+)/)[1]);

});您使用的是什么语言?为什么您必须在单个正则表达式中使用它?我宁愿提取
FAO=
之间的字符串并在
标记处拆分它。这不是特定于语言的问题,我只希望标准正则表达式进行解析。我可以编写代码来实现这一点,但这并没有帮助,因为应用程序的本质要求输入有效的正则表达式和匹配器组进行处理的用户。我不明白链接问题的答案是如何解决这个问题的?@Brent请参阅我答案中的编辑2。问题是我需要匹配器组来匹配数字。我无法使用其他代码对此应用程序执行此操作。@Brent在大多数语言中,不可能有任意数量的组匹配。请看指出这一点的可能重复问题:谢谢!我认为这就解决了问题……我不可能做我想做的事:-(
(?:FAO=|\G,)\K(\d+)