我正在尝试在以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
答案 0 :(得分:3)
“$&安培;”替换字符串表示“匹配源字符串” - 因此您基本上用自己替换找到的子字符串。见Substitutions in Regular Expressions
$& 在替换字符串中包含整个匹配的副本
我不确定你要做什么,但是
&
,请确保其编码正确$
中转义$$
。示例生成无效的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}