需要正则表达式来删除自定义标记标记

时间:2012-04-03 14:44:45

标签: c# .net regex

我之前没有写过正则表达式,而且我的知识严重不足。我希望这里的专家能够帮助我使用C#中可以用来删除标记标记的正则表达式。

标记中包含以下开场标记:<AI>!<AH>!<AG>!,并以另一个!结束

示例:the quick brown <AI>!fox jumps! over the lazy dog!

删除标记后应为:the quick brown fox jumps over the lazy dog!

代码段:

    NOT MORE THAN 85 % OF H<AH>!3!BO<AH>!3! CALCULATED ON THE DRY WEIGHT
- Uranium ores and pitchblende, and concentrates thereof, with a uranium content of more than 5 % by weight (<AI>!Euratom!)
- Monazite; urano-thorianite and other thorium ores and concentrates, with a thorium content of more than 20 % by weight (<AI>!Euratom!)
- - - -   -94% or more, but not more than 98.5% of a-Al<AH>!2!O<AH>!3!  -2% (+/-1.5%) of magnesium spinel,  -1% (+/-0.6%) of yttrium oxide and   -2% (+/-1.2%) of each lanthanum oxide and neodymium oxide  with less than 50% of the total weight having a particle size of more than 10mm
- Activated alumina with a specific surface area of at least 350 m<AG>!2!g
IRON OXIDES AND HYDROXIDES; EARTH COLOURS CONTAINING 70 % OR MORE BY WEIGHT OF COMBINED IRON EVALUATED AS FE<AH>!2!O<AH>!3!:
- <AI>!o!-Xylene
- <AI>!m!-Xylene
- <AI>!p!-Xylene
- - - 1,6,7,8,9,14,15,16,17,18,18-Dodecachloropentcyclo[12.2.1.1<AG>!6,9!.0<AG>!2,13!.0<AG>!5,10!]octadeca-7,15-diene, (CAS RN 13560-89-9)
- Chlorobenzene, <AI>!o!-dichlorobenzene and <AI>!p!-dichlorobenzene
- - - Di- or tetrachlorotricyclo[8.2.2.2<AG>!4,7!]xadeca-1(12),4,6,10,13,15-hexaene, mixed isomers
- Butan-1-ol (<AI>!n!-butyl alcohol)
- - 2-Methylpropan-2-ol (<AI>!tert!-butyl alcohol)
- <AI>!n!-Butyl acetate
- <AI>!O!-Acetylsalicylic acid, its salts and esters
- - <AI>!O!-Acetylsalicylic acid (CAS RN 50-78-2)
- 1-Naphthylamine (<AH>!alpha!-naphthylamine), 2-naphthylamine (<AI>!beta!-naphthylamine) and their derivatives; salts thereof
- <AI>!o!-, <AG>!m!-, <AH>!p!-Phenylenediamine, diaminotoluenes, and their derivatives; salts thereof:
- - <AI>!o!-, <AI>!m!-, <AI>!p!-Phenylenediamine, diaminotoluenes and their halogenated, sulphonated, nitrated and nitrosated derivatives; salts thereof:
- - Indole, 3-methylindole (skatole), 6-allyl-6,7-dihydro-5<AI>!H!-dibenz[<AI>!c,e!] azepinne (azapetine), phenindamine (INN) and their salts; imipramine hydrochloride (INNM)
- Vitamin B<AH>!1! and its derivatives
- Vitamin B<AH>!2! and its derivatives

提前谢谢

3 个答案:

答案 0 :(得分:5)

要使用的正则表达式将查找 A ,然后是 [GHI] 中的一个&lt;&gt;!。在发现之后,它会执行一个或多个( + )任何内容的懒惰搜索(由表示)()后跟一个感叹号。这是懒惰的,所以它不会寻找,直到它找到样本中的最后一个感叹号,它将停止在第一个感叹号并替换它找到的内容。然后,它将使用分组(模式中的括号)来存储标记中包含的值,并在替换时使用它( $ 1 表示第一组)。

var r = new Regex("<A[GHI]>!(.+?)!");
var actual = r.Replace(xml, "$1");

答案 1 :(得分:0)

要使用的正则表达式必须是这样的:

\<..\>!([^!]*)!

因为你必须匹配&lt; 两个字母&gt; ! 一系列没有!的角色,最后是一个!试。

然后用捕获的匹配(即括号之间的文本)替换匹配(与上面的表达式匹配的整个文本)。

答案 2 :(得分:0)

using System;
using System.Text.RegularExpressions;

public class Example
{
   public static void Main()
   {
       string pattern =  @"\<A(G|H|I)\>\!([^\!]*)\!";
       string input = "<AI>!n!-Butyl acetate the quick brown "
           + "<AI>!fox jumps! over the lazy dog!";
       string replacement = "$2";
       Regex rgx = new Regex(pattern);
       string result = rgx.Replace(input, replacement);

       Console.WriteLine("Original String:    '{0}'", input);
       Console.WriteLine("Replacement String: '{0}'", result);                             
    }
}

Original String:    '<AI>!n!-Butyl acetate the quick brown <AI>!fox jumps! over the lazy dog!'
Replacement String: 'n-Butyl acetate the quick brown fox jumps over the lazy dog!'

http://ideone.com/z0fbL