gpt4 book ai didi

c# - 正则表达式:查找以下一个单词开头的相同字母结尾的单词

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

我试图让正则表达式工作但不能(可能是因为我对正则表达式还很陌生)。

这是我想做的:

考虑一下这段文字:一个词,决斗。酸橙说再见。

想要的比赛:一个决斗Limes said 再见。

正如标题前面提到的,我想要匹配连续的单词,一个以(例如)“t”结尾,另一个以“t”开头,不区分大小写。

我得到的最接近答案的是这个表达式 [^a-z][a-z]*([a-z])[^a-z]+\1[a-z]*([a-z])[^a-z] +\2[a-z]*[^a-z]

最佳答案

你可以使用

(?i)\b(?<w>\p{L}+)(?:\P{L}+(?<w>(\p{L})(?<=\1\P{L}+\1)\p{L}*))+\b

参见 regex demo .结果在“w”组捕获集合中。

详情

  • \b - 单词边界
  • (?<w>\p{L}+) - 组“w”(word):1 个或多个 BMP Unicode 字母
  • (?:\P{L}+(?<w>(\p{L})(?<=\1\P{L}+\1)\p{L}*))+ - 1 次或多次重复
    • \P{L}+ - 1 个或多个 BMP Unicode 字符以外的字符
    • (?<w>(\p{L})(?<=\1\P{L}+\1)\p{L}*) - 组“w”:
      • (\p{L}) - 捕获到第 1 组的一封信
      • (?<=\1\P{L}+\1) - 紧靠当前位置的左侧,必须有与第 1 组中捕获的相同的字母,除字母外的 1+ 个字符,以及第 1 组中的字母
      • \p{L}* - 0 个或多个字母
  • \b - 单词边界。

enter image description here

C# code demo :

var text = "One word, duel. Limes said bye.";
var pattern = @"\b(?<w>\p{L}+)(?:\P{L}+(?<w>(\p{L})(?<=\1\P{L}+\1)\p{L}*))+\b";
var result = Regex.Match(text, pattern, RegexOptions.IgnoreCase)?.Groups["w"].Captures
.Cast<Capture>()
.Select(x => x.Value);
Console.WriteLine(string.Join(", ", result)); // => word, duel, Limes, said

A C# demo version without using LINQ :

string text = "One word, duel. Limes said bye.";
string pattern = @"\b(?<w>\p{L}+)(?:\P{L}+(?<w>(\p{L})(?<=\1\P{L}+\1)\p{L}*))+\b";
Match result = Regex.Match(text, pattern, RegexOptions.IgnoreCase);
List<string> output = new List<string>();
if (result.Success)
{
foreach (Capture c in result.Groups["w"].Captures)
output.Add(c.Value);
}
Console.WriteLine(string.Join(", ", output));

关于c# - 正则表达式:查找以下一个单词开头的相同字母结尾的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58942752/

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