gpt4 book ai didi

c# - 在 C# 中扩展 [^,]+, 正则表达式

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

重复

Regex for variable declaration and initialization in c#

我正在寻找一个正则表达式来解析 CSV 值,我遇到了这个正则表达式

[^,]+

我的工作是在每次出现“,”时拆分单词。我想知道的是说我有字符串

value_name v1,v2,v3,v4,...

现在我想要一个正则表达式来找到单词 v1,v2,v3,v4..

我试过了->

^value_name\s+([^,]+)*

但它对我不起作用。你能告诉我我做错了什么吗?我记得在研究正则表达式及其状态机实现。它不是以同样的方式工作吗。

如果字符串以 Value_name 开头,后跟一个或多个空格。转到下一个状态。在 That State 中读一个词,直到出现“,”。然后再做一次!每个单词都会被分组!

我理解错了吗?

最佳答案

您可以使用类似于建议的正则表达式:

(?:^value_name\s+)?([^,]+)(?:\s*,\s*)?
  • 第一组是非捕获组,将匹配行的开头和 value_name .
    为了确保正则表达式在所有匹配中仍然有效,我们使用 '?' 将该组设为可选。已修改(意思是最多匹配一次)。

  • 第二组正在捕获并匹配您的 vXX数据。

  • 第三组是非捕获的,会匹配 , , 以及它前后的任何空格。
    同样,我们通过使用 '?' 使其成为可选的修饰符,否则最后一个 'vXX'除非我们以最后的 ',' 结束字符串,否则组不会匹配.

在您的试验中,Regex 不会匹配多次:您必须记住,如果您希望 Regex 匹配字符串中的多次出现,整个 Regex 需要匹配 每一次出现在字符串中,因此您不仅要构建正则表达式以匹配字符串的开头 'value_name' , 但也匹配每次出现的 'vXX'

在 C# 中,您可以使用如下代码列出所有匹配项和组:

Regex r = new Regex(@"(?:^value_name\s+)?([^,]+)(?:\s*,\s*)?");
Match m = r.Match(subjectString);
while (m.Success) {
for (int i = 1; i < m.Groups.Count; i++) {
Group g = m.Groups[i];
if (g.Success) {
// matched text: g.Value
// match start: g.Index
// match length: g.Length
}
}
m = m.NextMatch();
}

关于c# - 在 C# 中扩展 [^,]+, 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/589323/

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