0

我有一个字符串 -

xyz":abc,"lmn

我想提取 abc。这将是什么正则表达式?

我正在尝试这个-

/xyz\":(.*?),\"lmn/

但它没有得到任何结果。

4

1 回答 1

1

在c#中你可以使用

var regex = new Regex(@"(?<=xyz\"":).*?(?=,\""lmn)");
var value = regex.Match(@"xyz"":abc,""lmn").Value;

请注意,这使用了 c# 逐字字符串前缀@,这意味着它\不被视为转义字符。您将需要使用双精度",以便将单"精度包含在字符串中。

此正则表达式使用前缀和后缀匹配规则,因此您无需从结果中选择特定组即可获得匹配。

或者,您可以使用组匹配

var regex=new Regex(@"xyz\"":(.*?),\""lmn");
var value = regex.Match(@"xyz"":abc,""lmn").Groups[1].Value;

您可以通过执行以下操作来检查是否存在匹配项

var match = regex.Match(@"xyz"":abc,""lmn");
var isMatch = match.Success;

然后根据您使用的正则表达式跟进match.Value或跟进。match.Groups[1].Value

编辑 实际上在 ac# regex 中不需要转义,"因此您可以使用以下任何一种。

var regex = new Regex("(?<=xyz\":).*?(?=,\"lmn)");
var regex = new Regex("xyz\":(.*?),\"lmn");

这两个不使用逐字字符串前缀,因此\"仅在正则表达式中翻译为"给出正则表达式(?<=xyz":).*?(?=,"lmn)xyz":(.*?),"lmn

此外,如果是整个字符串匹配而不是子字符串,您将需要以下之一。

var regex = new Regex("(?<=^xyz\":).*?(?=,\"lmn$)");
var regex = new Regex("^xyz\":(.*?),\"lmn$");
于 2013-07-11T08:36:15.840 回答