regex.replace - 找不到我的模式

本文关键字:我的 模式 找不到 replace regex | 更新日期: 2023-09-27 18:36:52

我正在尝试在以 adid= 开头的 xml 字符串中找到一个 guid

所以我试图从 xml 字符串中提取的字符串是 adid=[guid]

guid 是一个 8 位十六进制、4 位十六进制、4 位十六进制

、4 位十六进制和 12 位十六进制,用短划线分隔,例如,我的测试字符串中的那个是 adId=38d96c20-2515-41b4-a181-15588e3d7c1e

我是使用正则表达式的新手,所以如果它是基本的东西,我不会感到惊讶。

这是我的代码:

var adid = Regex.Replace(xmlString,
                         @"adid=[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}",
                         "$&",
                         RegexOptions.IgnoreCase);
//adid is now the same string as xmlString

我做错了什么?

输入:

fawetreawfafadidadid=38d96c20-2515-41b4-a181-15588e3d7c1e1231d21d12f1g

应返回:ADID=38D96C20-2515-41B4-A181-15588E3D7C1E

regex.replace - 找不到我的模式

替换字符串中的"$&"表示"从源字符串匹配" - 所以你基本上是用它自己替换找到的子字符串。请参阅正则表达式中的替换

$&在替换字符串中包含整个匹配项的副本

我不太确定你想做什么,但是

  • 考虑首先使用 XML API 解析 XML
  • 如果要在 XML 中手动插入&,请确保其编码正确
  • 您可能需要在替换模式 $$ 中转义$

生成无效 xml 的示例:

var adid = Regex.Replace(xmlString,
    @"[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}",
   "$$&", // notice "$$" for escaped "$"
    RegexOptions.IgnoreCase);
如果你想

保证adid=在GUID之前,你需要一个积极的后视:

string test =  Regex.Replace("aslkjfhasdfkasdadId=38d96c20-2515-42b4-a181-15588e3d7c1e",
                     @"(?<=adid=)[A-F'd]{8}-[A-F'd]{4}-[A-F'd]{4}-[A-F'd]{4}-[A-F'd]{12}",
                     "",
                     RegexOptions.IgnoreCase);

我不确定结果应该是什么,但是如果你想有一个字符串

adid=[guid] - 那么你的代码将如下所示:

Regex.Replace(xmlString, 
              @"'b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}'b", 
              "[guid]", 
              RegexOptions.IgnoreCase); 

如果您只想获取 GUID,则无需替换

Regex.Match(xmlString, 
              @"'b[A-F0-9]{8}(?:-[A-F0-9]{4}){3}-[A-F0-9]{12}'b", 
              RegexOptions.IgnoreCase); 

为了测试正则表达式,我建议使用此软件: http://www.radsoftware.com.au/regexdesigner/它既免费又简单。

我的 2 美分:

adId=[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}

如果您不想要 adId= 部分,请将其删除。

尝试

Regex.Replace(xmlString, 
              @"^('{){0,1}[0-9a-fA-F]{8}'-[0-9a-fA-F]{4}'-[0-9a-fA-F]{4}'-[0-9a-fA-F]{4}'-[0-9a-fA-F]{12}('}){0,1}$, 
              "'$0'", 
              RegexOptions.IgnoreCase); 

试试这个:雷克斯小提琴

'S{8}-'S{4}-'S{4}-'S{4}-'S{12}