gpt4 book ai didi

c# - 坚持 C# 正则表达式

转载 作者:行者123 更新时间:2023-11-30 15:03:55 26 4
gpt4 key购买 nike

我的数据库中的一个字段中包含以下文本:

[quote:5a7b87febe="mr smith"]This is some text.

This is more text on another line.[/quote:5a7b87febe]

我正在尝试构建一个正则表达式,将上面的任何实例转换为:

<div><h4>Posted by mr smith</h4>This is some text.

This is more text on another line.</div>

到目前为止,我放在一起的模式似乎适用于封闭文本中没有换行符的情况,但在上面的示例中,另一行有文本,模式不匹配。

我目前的 C# 代码是:

var exp = new Regex(@"(\[quote)(:\w+=\"")(.*?)(\""\])(.*?)(\[\/quote)(:\w+\])");
var str = exp.Replace(str, "<div><h4>Posted by $3</h4>$5</div>");

我对正则表达式一窍不通,所以我不确定如何处理出现在开始和结束“引号”标签之间的“任何”字符。

理想情况下,如果可能的话,我还希望表达式能够处理上述示例的嵌套实例。

另一件值得一提的事情是,“引号:”标签后面的一系列字符每次都是唯一的,引号内的名称也会有所不同。

最佳答案

您需要使用 Backreference以匹配开始标记中的唯一编号。像这样的东西应该适合你:

var regex = new Regex(@"\[(quote:[a-z0-9]+)(=""([^""]+)?"")?\](.*)\[/\1\]", RegexOptions.SingleLine);
var str = regex.Replace(str, "<div><h4>Posted by $3</h4>$4</div>");

此解决方案已使用您的输入进行测试,但未使用嵌套引号进行测试。这会有点棘手。

编辑:使用嵌套引号检查此解决方案后,它确实有效。您只需要重复调​​用它,直到不再进行替换。第一次它将匹配外部引号并在替换中完整保留内部引号。执行此操作的示例代码(未经测试):

// Repeatedly call this replacement
string last;
do
{
last = str;
str = regex.Replace(str, "<div><h4>Posted by $3</h4>$4</div>");
} while (last != str);

关于c# - 坚持 C# 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11048794/

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