gpt4 book ai didi

c# - 正则表达式匹配两个字符之间的多个数字组

转载 作者:行者123 更新时间:2023-11-30 21:36:24 25 4
gpt4 key购买 nike

我有一个如下所示的字符串:

<@399969178745962506> hello to <@!104729417217032192>

我有一个字典包含这两个看起来如下:

{"399969178745962506", "One"},
{"104729417217032192", "Two"}

我的目标是替换 <@399969178745962506>进入该数字键的值,在本例中为 One

Regex.Replace(arg.Content, "(?<=<)(.*?)(?=>)", m => userDic.ContainsKey(m.Value) ? userDic[m.Value] : m.Value);

我当前的正则表达式如下:(?<=<)(.*?)(?=>)它只匹配 < 之间的所有内容和 >在这种情况下,这将同时留下 @399969178745962506@!104729417217032192

我不能忽略 @标志,因为 !标志不是每次都在那里。因此,最好只获取类似 \d+ 的数字。

我需要弄清楚如何只获取 < 之间的数字和 >但我一辈子都想不通。

非常感谢任何帮助!

最佳答案

在 C# 中,您可以使用 2 种方法:基于(因为后视模式的宽度可变)的环视和捕获组方法。

基于环视的方法

可以轻松帮助您在正确的上下文中获取数字的模式是

(?<=<@!?)\d+(?=>)

参见 regex demo

(?<=<@!?)是一个积极的回顾,需要 <=<=!立即在当前位置的左侧和(?=>)是一个积极的前瞻,需要 >立即在当前位置右侧的字符。

捕获方法

您可以使用以下模式来捕获预期的<...> 中的数字。子字符串:

<@!?(\d+)>

详情

  • <@ - 文字 <@子串
  • !? - 一个可选的感叹号
  • (\d+) - 捕获匹配一位或多位数字的第 1 组
  • > - 文字 >签名。

请注意,您需要的值可以通过 match.Groups[1].Value 访问如上面的代码片段所示。

用法:

var userDic = new Dictionary<string, string> {
{"399969178745962506", "One"},
{"104729417217032192", "Two"}
};
var p = @"<@!?(\d+)>";
var s = "<@399969178745962506> hello to <@!104729417217032192>";
Console.WriteLine(
Regex.Replace(s, p, m => userDic.ContainsKey(m.Groups[1].Value) ?
userDic[m.Groups[1].Value] : m.Value
)
); // => One hello to Two
// Or, if you need to keep <@, <@! and >
Console.WriteLine(
Regex.Replace(s, @"(<@!?)(\d+)>", m => userDic.ContainsKey(m.Groups[2].Value) ?
$"{m.Groups[1].Value}{userDic[m.Groups[2].Value]}>" : m.Value
)
); // => <@One> hello to <@!Two>

参见 C# demo .

关于c# - 正则表达式匹配两个字符之间的多个数字组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48253155/

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