regex
  • vb.net
  • 2010-12-19 26 views 0 likes 
    0

    比方說,我有一個HTML字符串,如下圖所示:正則表達式替換需要幫助

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
    <html dir='ltr' xmlns='http://www.w3.org/1999/xhtml' xmlns:b='http://www.google.com/2005/gml/b' xmlns:data='http://www.google.com/2005/gml/data' xmlns:expr='http://www.google.com/2005/gml/expr'> 
    <head> 
    </head> 
    <body> 
    <p>GRANDMÈRE Break the fillets of the saucepan on a double and shaped into neat pieces and stir it boil hard, or of nutmeg and salt. Throw them fry as a few inches by one in this very well. Put the whites of butter by three. Put some artichoke-bottoms cooked green</p> 
    <p>darkly colored on half with a little flour MY_IDENTIFIER and midrib. Put a hot for each side of vanilla cream as you cannot give it, and dish is a cauliflower, which you have not very useful sauce from the inside with a little nutmeg, and serve with the King of water</p> 
    <p>dining-room. At the meat. STUFFED CAULIFLOWER SOUP (BELGIAN RECIPE) Take three quarters of tying the juice of ham. Keep the pot, so as being interpreted, means that time put them into four bay salt, and chopped. When the better to sprinkle in the tomato much as many crescents one of</p> 
    <p>touch the rabbit to put quickly in. A white wine glass cups and pour over them, cut them in salt, pepper, and fill them in a pint of the liquor; it is a poached on slowly, without a layer of an egg on the yolks, and mix very clean, while</p> 
    <p>CAKE, EXCELLENT FOR PASTRY Equal quantities of red wine. Stew your taste, use that, with extract and salt and ham, mushrooms when the mold and dip them a good red wine. This dish with pepper and place meat and serve with a good foundation for twenty potatoes, and potato, some</p> 
    <p>half-an-hour. GOLDEN RICE Put them very little MY_IDENTIFIER book on a glass dish that way. CABBAGE WITH CHEESE Every one and season it up with not enough to make a pat of butter, each round quickly. Or add, instead of fresh lean and let it every now and put it melts</p> 
    <p>leek, and over it, a half a fireproof cases from burning. CHOU-CROUTE Take the salad you take out the amount of cream is not get in four, about three-and-a-half pints of the middle of this sauce some chopped almonds, chopped parsley and mix it in your pieces of grated cheese</p> 
    <p>sides. In four or flageolets, and stir in company with flour, and let it out, and pour over all, chop your vinegar to half a lemon--this would do not quite, add the edges. Steep them in a tablespoonful of butter and mustard. Take it in salted water; and, crumbling out</p> 
    <p>care that it in which you have seasoned with an equal size, mix MY_IDENTIFIER these are well with the fermentation has a custard. Put the top with a very carefully, so that you have added at a sieve; or, for at home than thick. Then fry the custard as you prepare</p> 
    <p>stuffing into a fireproof dish, and fry them to picnics, or marjoram with this MY_IDENTIFIER way besides parsley. Roll them out neatly with vanilla, a tablespoonful of mustard, pepper and salt, then pour it all cooked, and it to be ready to keep it simmer it over and salt. The original</p> 
    </body> 
    </html>

    我需要找到p標籤,如果文本包含「MY_IDENTIFIER」然後做一些操作與文本和更換與一些文本的文本。

    在這裏我知道如何使用正則表達式找到帶有文本的段落標籤。我可以循環匹配,並可以根據需要使用文本進行操作。我想知道如何用另一個文本替換匹配的項目。

    在上面的例子中,我在第2,第6,第9和第10段中有「MY_IDENTIFIER」。比方說,我想換成第二段文字

    <p>2nd paragraph text</p>

    和6段文字

    <p>6th paragraph text</p>

    等等...

    我到目前爲止的代碼...

    Imports System.Text.RegularExpressions 
    
    Module modMain 
    
        Sub main() 
         Dim fileContents As String 
         fileContents = My.Computer.FileSystem.ReadAllText("C:\temp\a.html") 
         Dim paras As MatchCollection = Regex.Matches(fileContents, "<p>(.+?MY_IDENTIFIER.+?)</p>") 
         Dim TxtFound As String 
         For Each oMatch As Match In paras 
          TxtFound = oMatch.Groups(1).Value 
          'do some manipulations with txtfound 
          '... 
          'replace the txtfound with some other text 
    
         Next 
    
         'Save the file again 
        End Sub 
    End module

    任何幫助表示讚賞。

    回答

    0

    我首先嚐試找到通過全局匹配所有段落:

    my @matches = ($string =~ m!<p>(.*?)</p>!sig); 
    

    那我就遍歷,並替換任何包含您的標識:

    foreach(@matches) { 
        #keep a copy for substitution below 
        my $before = $_; 
    
        #if the identifier is found, replace it 
        if($_ =~ s!MY_IDENTIFIER!replacement text!is) { 
        #then take the newly replaced text, and replace it in your original $string variable 
        $string =~ s!$before!$_!is; 
        } 
    } 
    
    相關問題