2012-04-03 43 views
2

我之前没有写过正则表达式,而且我的知识远远不足。我希望这里的专家能够帮助我使用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 

感谢您提前

回答

5

使用将寻找<>一个随后的一个[GHI]包围的正则表达式!。它发现后,它会做一个懒搜索(由表示?)一个或多个(+)什么(),然后是一个感叹号的。这是懒惰的,所以它不会寻找,直到它找到样本中的最后一个感叹号,它会停在第一个感叹号并替换它找到的。然后它将使用分组(格式中的括号)来存储标签中包含的值,并在替换时使用它($ 1表示第一组)。

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

打破正则表达式,并解释到OP和其他人将是一个很好的事情。 – Oded 2012-04-03 14:52:45

+0

好呼!这足够吗? – 2012-04-03 14:57:48

+0

完美谢谢你 – Shurugwi 2012-04-03 15:21:28

0

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

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

,因为你必须< 两个字母>匹配! 一系列的人物没有!最后一个!再次。

然后,您通过捕获的匹配(即括号之间的文本)替换匹配(与上述表达式匹配的整个文本)。

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