用于忽略自定义转义字符的正则表达式模式

时间:2012-09-17 14:48:08

标签: c# regex

我正在尝试找到一个合适的正则表达式来匹配输入字符串中的一对自定义字符。这些自定义字符将替换为相应的html标记。

例如 输入字符串可以成对使用下划线来表示粗体字。因此, _Name_输出为<b>Name</b>

但是,如果字符串中有正版下划线,则不能用“粗体”标记替换它,必须忽略它。真正的下划线必须先于/(我找不到更好的角色,它可能是一个下划线或连字符或其他)。 正则表达式必须忽略这个真正的下划线的任何单个或成对的出现。

到目前为止,我可以拿出这个正则表达式:

var pattern = @"(?!/)_(.*?)(?!/)_";

但它在下面的输入字符串中失败:

_Tom_Katy/_Richard/_/_Stephan_and many users

输出为

<b>Tom</b>Katy/<b>Richard/_/</b>Stephan_and many users

非常感谢, PR

1 个答案:

答案 0 :(得分:1)

试试这个

@"(?<!/)_([^/]+?)[^/]_"

如果你想在搜索中包含/,可以在其中找到任何没有/的字符序列

@"(?<!\/)_(.+?)((?<!\/)_)"

说明:

(?<!/)      # this is a negative lookbehind, it says "I don't want the previous char to be /
_           # finds the first _
([^/]+?)   # tells to search characters without / (in this case your names)
[^/]_"      # finds the last _ not preceded by / (maybe redundant seen the previous one)