C#正则表达式来操作文本

时间:2012-06-18 08:19:12

标签: c# .net regex

我有一个包含大量旧phpBB数据的数据库,其中包含文字的帖子:

[b:522f1e2c15]bold[/b:522f1e2c15]
[i:522f1e2c15]italic[/i:522f1e2c15]
[u:522f1e2c15]underline[/u:522f1e2c15]
[img:522f1e2c15]http://www.mysite.com/myimage.jpg[/img:522f1e2c15]
[quote:522f1e2c15="Mr Smith"]quoted text by Mr Smith[/quote:522f1e2c15]
[quote="Mr Smith"]quoted text by Mr Smith[/quote]

我正在将这些数据迁移到一个新系统,当我来渲染它们时,这些标记都需要被操作,所以它们变成了:

<b>bold</b>
<i>italic</i>
<u>underline</u>
<img src="http://www.mysite.com/myimage.jpg" />
<div><h4>Posted by Mr Smith</h4>quoted text by Mr Smith
<div><h4>Posted by Mr Smith</h4>quoted text by Mr Smith

在大多数情况下,原始phpBB标签中出现的“id”与“每个帖子”相同,因此帖子可能如下所示(所有标签都包含id“522f1e2c15”):

This is [b:522f1e2c15]bold[/b:522f1e2c15] and this is [i:522f1e2c15]italic[/i:522f1e2c15].

但是,我也需要在同一个帖子中照顾不同于一个标签的id,即。

This is [b:123f1e2c15]bold[/b:123f1e2c15] and this is [i:522f1e2c15]italic[/i:522f1e2c15].

我还需要能够处理这些标记的嵌套实例,例如,带有一些斜体标记文本的粗体标记文本,即

This is [b:522f1e2c15]bold and [i:522f1e2c15]this is bold italic[/i:522f1e2c15][/b:522f1e2c15].

我最初在这里专门发布了一个similar question来处理上面的'quote'实例,这个实例是用working solution来回答的,但经过进一步的测试,我注意到了如果标签中包含的id用于同一帖子中的另一个标签(即我上面发布的示例),那么它会中断。

基本上我需要一个能够处理上述所有内容的正则表达式解决方案。

1 个答案:

答案 0 :(得分:1)

嵌套标签位在Regex中很难实现,但.NET正则表达式引擎提供了处理它们和ID匹配所需的所有工具。您可以应用具有平衡组的正则表达式来解决任务。

那就是说,对于这种数据,我宁愿实现一个真正的解析器,例如使用工具集,如GOLD Parser System或ANTLR。