gpt4 book ai didi

c# - 正则表达式匹配不在引号中的关键字

转载 作者:可可西里 更新时间:2023-11-01 03:06:52 25 4
gpt4 key购买 nike

我怎样才能找到不在字符串中的关键字。

例如,如果我有文本:

Hello this text is an example.

bla bla bla "this text is inside a string"

"random string" more text bla bla bla "foo"

我希望能够匹配所有的单词 text不在里面 " " .在其他情况下,我想匹配:

enter image description here

请注意,我不想匹配以红色突出显示的文本,因为它在字符串中


可能的解决方案:

我一直在努力,这是我目前所做的:

(?s)((?<q>")|text)(?(q).*?"|)

请注意正则表达式将 if 语句用作:(?(predicate) true alternative|false alternative)

因此正则表达式将显示为:

find " or text. If you find " then continue selecting until you find " again (.*?") if you find text then do nothing...

当我运行那个正则表达式时,我匹配了整个字符串。我问这个问题是为了学习。我知道我可以删除所有字符串,然后查找我需要的内容。

最佳答案

这是一个答案:

(?<=^([^"]|"[^"]*")*)text

这意味着:

(?<=       # preceded by...
^ # the start of the string, then
([^"] # either not a quote character
|"[^"]*" # or a full string
)* # as many times as you want
)
text # then the text

您可以轻松地扩展它来处理包含转义的字符串。

在 C# 代码中:

Regex.Match("bla bla bla \"this text is inside a string\"",
"(?<=^([^\"]|\"[^\"]*\")*)text", RegexOptions.ExplicitCapture);

从评论讨论中添加 - 扩展版本(逐行匹配并处理转义)。为此使用 RegexOptions.Multiline:

(?<=^([^"\r\n]|"([^"\\\r\n]|\\.)*")*)text

在 C# 字符串中,它看起来像:

"(?<=^([^\"\r\n]|\"([^\"\\\\\r\n]|\\\\.)*\")*)text"

因为你现在想使用 ** 而不是 " 这里有一个版本:

(?<=^([^*\r\n]|\*(?!\*)|\*\*([^*\\\r\n]|\\.|\*(?!\*))*\*\*)*)text

解释:

(?<=       # preceded by
^ # start of line
( # either
[^*\r\n]| # not a star or line break
\*(?!\*)| # or a single star (star not followed by another star)
\*\* # or 2 stars, followed by...
([^*\\\r\n] # either: not a star or a backslash or a linebreak
|\\. # or an escaped char
|\*(?!\*) # or a single star
)* # as many times as you want
\*\* # ended with 2 stars
)* # as many times as you want
)
text # then the text

由于此版本不包含 " 字符,因此使用文字字符串更简洁:

@"(?<=^([^*\r\n]|\*(?!\*)|\*\*([^*\\\r\n]|\\.|\*(?!\*))*\*\*)*)text"

关于c# - 正则表达式匹配不在引号中的关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11620250/

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