我有一些我希望在C#中匹配和替换的文字
文本将是这样的,并且可以在字符串中多次出现
这是一些内容!!这里的一些链接文本可以是任何东西:: / something / something / url.html !!在里面
我目前正在使用此正则表达式并替换但它无效。如果值中没有空格,它似乎只能起作用。
Regex r = new Regex("!!(?<first>\\S+)::(?<last>\\S+)!!");
content = r.Replace(content, delegate(Match match) { return ReturnCustomSpan(match.Groups[1].Value, match.Groups[2].Value); });
有人可以帮忙吗?我是一个正则表达式的菜鸟,我无法想出这个。
答案 0 :(得分:4)
\ S是所有非空白字符,因此您明确排除空格。如果要匹配任何字符,请使用。+而不是\ S +
答案 1 :(得分:2)
试试这个:
!!(?<first>.+?)::(?<last>.+?)!!
它使用非贪心量词(.+?
),因此正则表达式将正确匹配字符串,如下所示:
This is some content with a !!Some link text here this can be anything::/something/something/url.html!! :: inside it!!
否则它将“吃掉”从!!
的第一次出现到最后一次出现的所有事情,这可能不是你所期望的。
答案 2 :(得分:0)
\S
是你的问题,但正如伊戈尔·科尔霍夫所提到的,你应该得到什么
与您的分隔符不同步的内容会有麻烦。
没有真正的保护标准。通过说,
delimeters是!!
和::
,它会让它在内容中存在
仅作为一个分隔符,而不是它的文本部分。
如果你说它只作为分界符存在,那么你必须使用
如上所述的非贪婪方式,否则你将超支。
如果你说它可以作为分隔符之外的文本存在,并且形式为
!! :: !!
是完美的,然后只有一种方法可以解析它。
!!((?:(?!::|!!)[\s\S])*)::((?:(?!!!|::)[\s\S])*)!!
或
!!(?<first>(?:(?!::|!!)[\s\S])*)::(?<last>(?:(?!!!|::)[\s\S])*)!!