如何在F#中为不同的捕获组指定正则表达式替换

时间:2017-06-03 15:07:17

标签: regex f#

我在F#中编写了一个md2html编译器,我想用**<b>标签替换</b>周围的文本。

e.g。 this is **bold**将更改为this is <b>bold</b>

我正在尝试使用模式Regex.Replace使用(\*\*).*?(\*\*)方法完成此操作。因此,第一个捕获组将被<b>替换,第二个捕获组将被</b>替换。我想知道如何指定替换这些不同的捕获组&#34;而不是整个正则表达式匹配?

3 个答案:

答案 0 :(得分:4)

只需使用此正则表达式:\*\*(.*?)\*\*并将匹配项替换为<b>$1</b>

说明:

  • \*\*字面上匹配**
  • (启动了一个捕获组。
  • .*只是匹配它不能获得的新内容。
  • ?这会使.*懒惰,因此它与其他粗体文字不匹配。
  • )结束捕获组。
  • \*\*字面上匹配**

答案 1 :(得分:4)

你应该抓住你需要保留的东西。您需要匹配需要更换的内容。

使用\*\*(.*?)\*\*模式和<b>$1</b>替换。

如果您希望星号之间有换行符,请使用单行修饰符(?s)(?s)\*\*(.*?)\*\*

答案 2 :(得分:4)

最简单的方法是捕获内部组而不是周围的**,然后在替换中使用它。

Regex.Replace("this is **bold**", "\*\*(.*?)\*\*", "<b>$1</b>")

Regex.Replace不会替换已捕获的群组,而是取代整个匹配。