gpt4 book ai didi

c# - 在 C# 正则表达式中正确使用字符组

转载 作者:行者123 更新时间:2023-11-30 16:26:23 27 4
gpt4 key购买 nike

有一种更好的方法可以将此 Regex 简化为更简洁的格式,但我似乎无法正确实现字符组以供重用。对于如何更好地完成这场比赛的任何其他建议,我们将不胜感激。

预期匹配:

<Formatting Type="B">any text</Formatting>

这可以像这样嵌套在其他格式标签中

<Formatting Type="B"><Formatting Type="I">any text</Formatting>any text</Formatting>

下面的正则表达式可以解决问题,但似乎比它应该的更复杂,因为我在这部分重复了三遍

最终目标是替换 <Formatting 的所有实例带有标准 HTML 标签 <B> <I> <U>

[\040\w!\?\:\.]*

整体正则表达式如下

<Formatting Type="[BIU]{1}">([\040\w!\?\:\.]*(<[BIU]>)*[\040\w!\?\:\.]*(</[BIU]>)*[\040\w!\?\:\.]*)*</Formatting>

最佳答案

我想这就是你想要的:

<Formatting Type="([BIU])">([ \w!?:.]*(?:</?[BIU]>[ \w!?:.]*)*)</Formatting>

不需要为打开和关闭 HTML 标签单独生成,就像您不需要区分 <B> 一样。 , <I><U>标签。重要的是,在匹配空缺后 <Formatting>标签,您不会在结束之前使用任何更多 开始标签 </Formatting>标签。如果原始标签正确嵌套,HTML 标签也会正确嵌套。

我假设只有这三种格式,文本中不会有任何其他尖括号或类似标签的东西。在这种情况下,您不需要对正则表达式进行如此严格的限制。

text = Regex.Replace(text,
@"<Formatting Type=""([BIU])"">([^<]*(?:</?[BIU]>[^<]*)*)</Formatting>",
@"<$1>$2</$1>");

当然,您需要多次遍历文本以确保替换了所有标签。鉴于您的示例文本:

<Formatting Type="B"><Formatting Type="I">any text</Formatting>any text</Formatting>

...在第一次通过后,它将更改为:

<Formatting Type="B"><I>any text</I>any text</Formatting>

...在第二遍之后:

<B><I>any text</I>any text</B>

关于c# - 在 C# 正则表达式中正确使用字符组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8845765/

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