regex.replace - 找不到我的模式?

时间:2013-10-25 19:19:56

标签: c# regex

我正在尝试在以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

6 个答案:

答案 0 :(得分:3)

“$&安培;”替换字符串表示“匹配源字符串” - 因此您基本上用自己替换找到的子字符串。见Substitutions in Regular Expressions

  

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

我不确定你要做什么,但是

  • 考虑使用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);

答案 1 :(得分:1)

如果你想保证adid=在指导之前,你需要一个积极的支持:

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);

答案 2 :(得分:0)

尝试

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); 

答案 3 :(得分:0)

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

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/它是免费且简单的。

答案 4 :(得分:0)

我的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 =部分,请将其删除。

答案 5 :(得分:0)

试试这个: RexFiddle

\S{8}-\S{4}-\S{4}-\S{4}-\S{12}