gpt4 book ai didi

c# - 正则表达式匹配所有用括号括起来并用竖线分隔的单词

转载 作者:行者123 更新时间:2023-12-02 16:04:59 24 4
gpt4 key购买 nike

我认为有时图像比文字更好。

enter image description here

如您所见,我的问题是它只能两个匹配两个词。我怎样才能匹配所有的单词?

我当前的正则表达式 (PCRE):([^\|\(\)\|]+)\|([^\|\(\)\|]+)

目标:为每个单词检索一个单独的组中的所有单词

最佳答案

您可以在 C# 中使用无限长度的后视(带先行):

(?<=\([^()]*)\w+(?=[^()]*\))

匹配括号内不包含(的任何类型的字符串, )| ,您将需要替换 \w+[^()|]+ :

(?<=\([^()]*)[^()|]+(?=[^()]*\))
// ^^^^^^

参见 regex demo (和 regex demo #2 )。 详细信息:

  • (?<=\([^()]*) - 与紧接在 ( 之前的位置相匹配的正后视然后是 ( 以外的零个或多个字符和 )
  • \w+ - 一个或多个单词字符
  • (?=[^()]*\)) - 与紧随其后的零个或多个字符(( 以外的字符)匹配的位置的正向前瞻。和 )然后是 )字符。

另一种捕获这些词的方法是使用

(?:\G(?!^)\||\()(\w+)(?=[^()]*\))     // words as units consisting of letters/digits/diacritics/connector punctuation
(?:\G(?!^)\||\()([^()|]+)(?=[^()]*\)) // "words" that consist of any chars other than (, ) and |

参见 this regex demo .您需要的词现在在第 1 组中。详细信息:

  • (?:\G(?!^)\||\() - 上一场比赛之后的位置 ( \G(?!^) ) 和 |字符 ( \| ), 或 ( | ) (字符 ( \( )
  • (\w+) - 第 1 组:一个或多个单词字符
  • (?=[^()]*\)) - 确保存在 ) 的正面前瞻除 ( 之外的任何零个或多个字符之后的字符和 )在当前位置的右侧。

在 C# 中提取匹配项可以用

var matches = Regex.Matches(text, @"(?<=\([^()]*)\w+(?=[^()]*\))")
.Cast<Match>()
.Select(x => x.Value);

// Or
var matches = Regex.Matches(text, @"(?:\G(?!^)\||\()(\w+)(?=[^()]*\))")
.Cast<Match>()
.Select(x => x.Groups[1].Value);

关于c# - 正则表达式匹配所有用括号括起来并用竖线分隔的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69672403/

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