正则表达式:查找以相同字母结尾的单词,下一个单词以

精灵

我试图使regex正常工作,但无法(可能是因为我对regex相当陌生)。

这是我想做的:

考虑以下文本:一个单词,决斗。酸橙说再见。

想要的比赛:一个决斗酸橙 再见。

正如标题中先前提到的,我想使连续的单词匹配,一个单词以(例如)“ 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演示结果在“ w”组捕获集合中。

细节

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

在此处输入图片说明

C#代码演示

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

一个C#演示版本,而不使用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));

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

正则表达式以首字母开头并且包含一个单词

来自分类Dev

正则表达式允许字母,单词之间有一个空格,总长度为50

来自分类Dev

使用正则表达式匹配每个单词中第一个出现的字母

来自分类Dev

正则表达式仅匹配单词中的第一个字母

来自分类Dev

正则表达式在一个单词之后匹配特定单词

来自分类Dev

正则表达式匹配单词的第一个字母,但不匹配“和”

来自分类Dev

正则表达式单词匹配并提取下一个单词

来自分类Dev

如何创建一个正则表达式,以任意组合查找单词?

来自分类Dev

正则表达式匹配与下一个存在空格或字符串的结尾

来自分类Dev

如何使用正则表达式在单词组合之后和下一个空格之前查找包含单词和非单词字符的模式

来自分类Dev

正则表达式以匹配一个以单词开头,以数字结尾或不以数字结尾的字符串

来自分类Dev

正则表达式排除第一个单词以冒号结尾的行

来自分类Dev

在python中使用正则表达式在字符串列表中的匹配关键字之后找到下一个单词

来自分类Dev

正则表达式以检测单词是否是字符串的一部分,而下一个单词不大写

来自分类Dev

红宝石/正则表达式获取每个单词的第一个字母

来自分类Dev

使用正则表达式匹配另一个单词的排列单词

来自分类Dev

正则表达式以首字母开头,并且包含一个单词

来自分类Dev

正则表达式查找相同的连续单词

来自分类Dev

grep +正则表达式以匹配位于最后一个单词之前的单词

来自分类Dev

正则表达式查找逗号之间的最后一个单词

来自分类Dev

正则表达式:仅在表达式中间拒绝一个单词

来自分类Dev

正则表达式最多可匹配2个完整单词,而下一个包含该字符的单词

来自分类Dev

正则表达式,用于查找没有或只有一个单词的单词

来自分类Dev

正则表达式匹配整个世界或以一个单词开头和/或以另一个单词结尾

来自分类Dev

正则表达式 - 使用正则表达式查找 2 个或更多单词

来自分类Dev

使用正则表达式仅匹配特定单词中的一个单词

来自分类Dev

正则表达式将每个单词的第一个字母大写

来自分类Dev

我需要一个正则表达式来阻止不是 3 个(或更多)字母的单词?

来自分类Dev

正则表达式 - 找到一个带有数字/字母/两者并以 .php 结尾的 8 个字母的单词

Related 相关文章

  1. 1

    正则表达式以首字母开头并且包含一个单词

  2. 2

    正则表达式允许字母,单词之间有一个空格,总长度为50

  3. 3

    使用正则表达式匹配每个单词中第一个出现的字母

  4. 4

    正则表达式仅匹配单词中的第一个字母

  5. 5

    正则表达式在一个单词之后匹配特定单词

  6. 6

    正则表达式匹配单词的第一个字母,但不匹配“和”

  7. 7

    正则表达式单词匹配并提取下一个单词

  8. 8

    如何创建一个正则表达式,以任意组合查找单词?

  9. 9

    正则表达式匹配与下一个存在空格或字符串的结尾

  10. 10

    如何使用正则表达式在单词组合之后和下一个空格之前查找包含单词和非单词字符的模式

  11. 11

    正则表达式以匹配一个以单词开头,以数字结尾或不以数字结尾的字符串

  12. 12

    正则表达式排除第一个单词以冒号结尾的行

  13. 13

    在python中使用正则表达式在字符串列表中的匹配关键字之后找到下一个单词

  14. 14

    正则表达式以检测单词是否是字符串的一部分,而下一个单词不大写

  15. 15

    红宝石/正则表达式获取每个单词的第一个字母

  16. 16

    使用正则表达式匹配另一个单词的排列单词

  17. 17

    正则表达式以首字母开头,并且包含一个单词

  18. 18

    正则表达式查找相同的连续单词

  19. 19

    grep +正则表达式以匹配位于最后一个单词之前的单词

  20. 20

    正则表达式查找逗号之间的最后一个单词

  21. 21

    正则表达式:仅在表达式中间拒绝一个单词

  22. 22

    正则表达式最多可匹配2个完整单词,而下一个包含该字符的单词

  23. 23

    正则表达式,用于查找没有或只有一个单词的单词

  24. 24

    正则表达式匹配整个世界或以一个单词开头和/或以另一个单词结尾

  25. 25

    正则表达式 - 使用正则表达式查找 2 个或更多单词

  26. 26

    使用正则表达式仅匹配特定单词中的一个单词

  27. 27

    正则表达式将每个单词的第一个字母大写

  28. 28

    我需要一个正则表达式来阻止不是 3 个(或更多)字母的单词?

  29. 29

    正则表达式 - 找到一个带有数字/字母/两者并以 .php 结尾的 8 个字母的单词

热门标签

归档