gpt4 book ai didi

c# - 匹配字符串分隔 - 使用正则表达式

转载 作者:行者123 更新时间:2023-11-30 20:30:19 26 4
gpt4 key购买 nike

正则表达式不是我最喜欢的东西,但它肯定有它的用途。现在我正在尝试匹配一个由这个组成的字符串。

[video-{service}-{id}] 

这样一个字符串的例子:

[video-123abC-zxv9.89]

在上面的示例中,我想获得“服务”123abC 和“id”zxv9.89。

到目前为止,这就是我所拥有的。可能过于复杂了..

var regexPattern = @"\[video-(?<id1>[^]]+)(-(?<id2>[^]]+))?\]";
var ids = Regex.Matches(text, regexPattern, RegexOptions.IgnoreCase)
.Cast<Match>()
.Select(m => new VideoReplaceItem()
{
Tag = m.Value,
Id = string.IsNullOrWhiteSpace(m.Groups["id1"].Value) == false ? m.Groups["id1"].Value : "",
Service = string.IsNullOrWhiteSpace(m.Groups["id2"].Value) == false ? m.Groups["id2"].Value : "",
}).ToList();

这不起作用,会将“[video-”之后的所有字符放入 Id 变量中。

有什么建议吗?

最佳答案

第三部分似乎是可选的。 [^]]+实际上匹配 -符号,并修复表达式,您要么需要制作第一个 [^]]+惰性 ( [^]]+? ) 或向否定字符类添加连字符。

使用

\[video-(?<id1>[^]-]+)(-(?<id2>[^]-]+))?]

参见 regex demo

或者使用惰性字符类:

\[video-(?<id1>[^]]+?)(-(?<id2>[^]]+))?]
^

参见 another demo .

由于您使用的是命名组,因此您可以使用 RegexOptions.ExplicitCapture 编译正则表达式对象使正则表达式引擎将所有编号的捕获组视为非捕获组的选项(以免在定义可选 ?: 组的 ( 之后添加 (-(?<id2>[^]-]+))?)。

关于c# - 匹配字符串分隔 - 使用正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45000493/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com