正则表达式来找到标记

问题描述 投票:3回答:2

我敢肯定已经有人问过这个问题,但我不知道该寻找什么话在谷歌找到这些问题的答案。

我要“翻译”与标记为HTML(或RTF或XAML)一文。对于“大胆”的标记为*。如果我想大胆的文本包含文字·我有一个反斜杠来掩盖它。

因此,标记文本...

This is *ju\*st* a test.

...应该翻译成“这是菊* ST的测试。”

我正在寻找一个正则表达式来获得所有的比赛,以“翻译”里面我的标记文本加粗。

现在我只能和这一个(字面星之后是不是明星(尽可能少的一个或多个字符),其次是文字星)

\*[^*]+?\*

但我怎么能增强“是不是明星一个或多个字符”部分根本不被前面有一个反斜杠明星停下来?

我想在.NET项目中使用这个表达式,万一有语言之间的差异。

regex
2个回答
1
投票

您可以使用

(?<=(?<!\\)(?:\\{2})*)\*[^\\*]*(?:\\.[^\\*]*)*\*

.NET regex demo

细节

  • (?<=(?<!\\)(?:\\{2})*) - 一个积极的回顾后,使确保没有\逃逸字符的当前位置之前。换句话说,它匹配的是立即前面有一个位置: (?<!\\) - 没有\焦炭随后用 (?:\\{2})* - 双反斜线的任何零次或多次重复
  • qazxsw POI - 一个qazxsw POI图表
  • \* - 零或小于*[^\\*]*等多个字符
  • \ - 非捕获组匹配的开始...... * - 任何字符(除换行符其他,编译图案(?:以允许任何转义字符)用\\.炭逃脱 RegexOptions.Singleline - 零或小于\[^\\*]*等多个字符
  • \ - 零次或多次
  • qazxsw POI - 一个qazxsw POI图表。

1
投票

你想从一个标记星到另一种标记明星赛。在你的标记语言,文字明星其实不仅是*,但)*。在正则表达式,这相当于通过\*:反斜杠,必须逃脱,然后一个明星,那也必须被转义。

因此,你需要指定你的模式,你正在寻找一个标记的明星,而不是字面的明星。

*

这是有点过,但因为*是贪婪的,所以在\*,它会在整个字符串匹配,从第一个到最后一个明星。

您可以使用星改性剂的懒惰/非贪婪版本:\\\*在大多数发动机。因此,它变成了:

\*.*[^\\]\*

\*             a markup star
  .*           followed by any character
    [^\\]\*    then a markup star, that is, one not escaped by a backslash

小试与Python:

.*

如果您正则表达式引擎不支持懒惰改性剂,就需要明确这种行为:

"*ju\*st* *ju\*st*
© www.soinside.com 2019 - 2024. All rights reserved.