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
替换字符串中的"$&"表示"从源字符串匹配" - 所以你基本上是用它自己替换找到的子字符串。请参阅正则表达式中的替换
$&在替换字符串中包含整个匹配项的副本
我不太确定你想做什么,但是
- 考虑首先使用 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}