gpt4 book ai didi

c# - 正则表达式拆分数字和字符串,序号指示符除外

转载 作者:行者123 更新时间:2023-11-30 15:56:30 29 4
gpt4 key购买 nike

寻找一个正则表达式来引入一个空间,在这个空间中数字和字符串在用户输入中被连接起来,除了序号指示符,例如第 1、11、22、33、44 等

所以这个字符串:

Hi is this available 18dec to 21st dec

返回为

Hi is this available 18 dec to 21st dec

使用这个表达式

 Regex.Replace(value, @"(\d)(\p{L})", "$1 $2"))

给予

Hi is this available 18 dec to 21 st dec

编辑:

根据@juharr 的评论,12 月 12 日应该更改为 12 月 12 日

最佳答案

您可以使用如下解决方案:

var s = "Hi is this available 18dec to 21st dec 2nd dec 1st jan dec12th";
var res = Regex.Replace(s, @"(\p{L})?(\d+)(st|[nr]d|th|(\p{L}+))", repl);
Console.WriteLine(res);
// => Hi is this available 18 dec to 21st dec 2nd dec 1st jan dec 12th

// This is the callback method that does all the work
public static string repl(Match m)
{
var res = new StringBuilder();
res.Append(m.Groups[1].Value); // Add what was matched in Group 1
if (m.Groups[1].Success) // If it matched at all...
res.Append(" "); // Append a space to separate word from number
res.Append(m.Groups[2].Value); // Add Group 2 value (number)
if (m.Groups[4].Success) // If there is a word (not st/th/rd/nd suffix)...
res.Append(" "); // Add a space to separate the number from the word
res.Append(m.Groups[3]); // Add what was captured in Group 3
return res.ToString();
}

参见 C# demo .

使用的正则表达式是

(\p{L})?(\d+)(st|[nr]d|th|(\p{L}+))

参见 its demo online .它匹配:

  • (\p{L})? - 匹配单个字母的可选组 1
  • (\d+) - 第 2 组:一个或多个数字
  • (st|[nr]d|th|(\p{L}+)) - 第 3 组匹配以下选项
    • st - st
    • [nr]d - ndrd
    • th - th
    • (\p{L}+) - 第 4 组:任何 1 个或多个 Unicode 字母

repl 回调方法采用匹配对象并使用额外的逻辑根据可选组是否匹配来构建正确的替换字符串。

如果您需要不区分大小写的搜索和替换,请传递 RegexOptions.IgnoreCase 选项,如果您只想将 ASCII 数字与 \匹配,请传递 RegexOptions.ECMAScript d(请注意,即使您将此选项传递给正则表达式,\p{L} 仍将匹配任何 Unicode 字母)。

关于c# - 正则表达式拆分数字和字符串,序号指示符除外,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46666468/

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