gpt4 book ai didi

c# - 如何匹配所有正则表达式组之间有或没有字符

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

这是我的正则表达式

(".+?")*([^{}\s]+)*({.+?})*

通常用这个表达式匹配效果很好,但前提是匹配组之间有任何字符。例如这个:

{1.0 0b1 2006-01-01_12:34:56.789} {1.2345 0b100000 2006-01-01_12:34:56.789}

产生两个匹配项:

1. {1.0 0b1 2006-01-01_12:34:56.789}
2. {1.2345 0b100000 2006-01-01_12:34:56.789}

但是这个:

{1.0 0b1 2006-01-01_12:34:56.789}{1.2345 0b100000 2006-01-01_12:34:56.789}

只有一个包含最后一场比赛:

{1.2345 0b100000 2006-01-01_12:34:56.789}

附言。我正在使用开关 g 进行全局匹配

编辑:我同时做研究,我必须提供额外的数据。我粘贴了整个正则表达式,它也匹配单词和字符串,所以组后的星号是必要的

EDIT2:这是示例文本:

COMMAND STATUS {OBJECT1}{OBJECT2} "TEXT" "TEXT"

因此我想要这个组:

COMMAND
STATUS
{OBJECT1}
{OBJECT2}
"TEXT1"
"TEXT2"

这是我实际的 C# 代码:

var regex = new Regex("(\".+?\")*([^{}\\s]+)*({.+?})*");
var matches = regex.Matches(responseString);
return matches
.Cast<Match>()
.Where(match => match.Success && !string.IsNullOrWhiteSpace(match.Value))
.Select(match => CommandParameter.Parse(match.Value));

最佳答案

您可以使用以下正则表达式来捕获所有 {...}:

(".+?"|[^{}\s]+|{[^}]+?})

参见 demo here .

我捕获某些单个字符内的任何内容的方法是使用具有相同字符的否定字符类。此外,由于您匹配的是非空文本,因此最好使用 + 量词来确保至少匹配 1 个字符。

编辑:

与其让每个组都可选,不如使用替代列表。

关于c# - 如何匹配所有正则表达式组之间有或没有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29606434/

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