gpt4 book ai didi

c# - 如何在字符串中查找所有匹配项

转载 作者:太空狗 更新时间:2023-10-30 00:29:59 25 4
gpt4 key购买 nike

假设我有以下字符串:

xx##a#11##yyy##bb#2##z

我正在尝试检索所有出现的 ##something#somethingElse##

(在我的字符串中,我希望有 2 个匹配项:##a#11####bb#2##)

我尝试使用

获取所有匹配项
Regex.Matches(MyString, ".*(##.*#.*##).*")

但它会检索一个匹配项,即整行。

如何从该字符串中获取所有匹配项?谢谢。

最佳答案

既然你有.*在你的模式的开头和结尾,你只会得到整行匹配。此外,.*中间# s 在你的模式中太贪婪了,当在一行中遇到时,会把所有预期的匹配都抓到 1 个匹配中。

你可以使用

var results = Regex.Matches(MyString, "##[^#]*#[^#]*##")
.Cast<Match>()
.Select(m => m.Value)
.ToList();

参见 regex demo

注意:如果 ## 之间必须至少有 1 个字符和 # , 和 ### , 替换 * + 的量词(匹配 0 次以上)量词(匹配出现次数超过 1 次)。

注意 2: 避免在 ####..#....##### 内匹配,您可以添加环视:"(?<!#)##[^#]+#[^#]+##(?!#)"

图案细节:

  • ## - 2 #符号
  • [^#]*/[^#]+ - 一个 negated character class匹配 # 以外的 0+ 个字符(或 1+ 个字符)
  • # - 单个 #
  • [^#]*/[^#]+ - 除 # 以外的 0+(或 1+)个字符
  • ## - 双#符号。

奖励:获取里面的内容#### ,使用捕获组,一对未转义的 (...)在需要提取的图案部分周围,然后抓取 Match.Groups[1].Value小号:

var results = Regex.Matches(MyString, @"##([^#]*#[^#]*)##")
.Cast<Match>()
.Select(m => m.Groups[1].Value)
.ToList();

关于c# - 如何在字符串中查找所有匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43782396/

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