C# 正则表达式:字符串末尾的if模式不匹配

C# 正则表达式:字符串末尾的if模式不匹配,c#,.net,regex,C#,.net,Regex,我有以下正则表达式,其中我希望匹配任何后跟一个或多个的显式点: <b> <i> <u> </b> </i> </u> 如果这个正则表达式出现在字符串的末尾,我希望它与这个模式不匹配 string = Regex.Replace(string, "\.((<[\/biu]+>)+)", ".$1||") string=Regex.Replace(字符串“\.(()+)”,“$1 | |”) 例: 这应该匹

我有以下正则表达式,其中我希望匹配任何后跟一个或多个的显式点:

<b> <i> <u> </b> </i> </u>

如果这个正则表达式出现在字符串的末尾,我希望它与这个模式不匹配

string = Regex.Replace(string, "\.((<[\/biu]+>)+)", ".$1||")
string=Regex.Replace(字符串“\.(()+)”,“$1 | |”)
例:

这应该匹配。好的。
这不应该匹配。
“\.(()+)(?!$)”

使用带有
$
符号的否定先行断言检查行的结尾。(请记住,
$
与行尾匹配,因此您不希望与行尾匹配。)

强制在最后一个关闭的元素之后有更多的项,但确保它们不是元素本身

"\.((<[\/biu]+>)+)[^<>]+"
“\(()+)[^]+”
您可以使用:

\(?>(?:)+)(?!$)

谢谢,但它仍然匹配以下内容中的“.”:这不应该匹配。您可以通过引入
符号使其不贪婪。这可能会使它与你写的不匹配。(我现在没有任何资源可供测试)因为答案与标题匹配,所以被选中,这正是我想要的答案。:)OP捕获标签并用1美元重新插入,因此他应该添加捕获参数,而不是前瞻。此外,这是唯一的答案,纠正了OP的错误WRT匹配标签。
"\.((<[\/biu]+>)+)(?!$)"
"\.((<[\/biu]+>)+)[^<>]+"
\.(?>(?:<\/?[biu]>)+)(?!$)