如何在C#中将字符串中的所有内容捕获到单独的组中?

Oma*_*sia 0 c# regex regex-group regex-greedy regex-lookarounds

我在文件中有一些数据,并且我正在使用这些数据Regex来获取单个元素并删除和标记\r\n之间的所有内容。<opening></closing>

但是,当我尝试elements单独选择时,最后,整个数据将被选为一组。

这是我的正则表达式:

(<([ph0-9figc]+)>)([a-zA-Z0-9äöüÄÖÜß[:punct:] \n\r\t])+(<\/\2>)
Run Code Online (Sandbox Code Playgroud)

输入数据样本

Emm*_*mma 6

使用正则表达式执行此任务可能不是最好的主意,尤其是在替换新行时。

如果确实需要,我们可能希望一一捕获这些标签。例如,此表达式仅p使用三个捕获组来捕获标签()

(<p>)([\s\S]*?)(<\/p>)
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

regex101.com

RegEx电路

我们还可以在jex.im中可视化您的表达式:

在此处输入图片说明

JavaScript演示

C#测试

using System;
using System.Text.RegularExpressions;

public class Example
{
    public static void Main()
    {
        string pattern = @"(<p>)([\s\S]*?)(<\/p>)";
        string input = @"<p>
<st>Liebe stern-Redaktion,
</st> 
<i>Liebe stern-Redaktion,</i> warum schreiben Sie nicht, was wirklich freitags whrend der Protest-Demos am Grenzzaun passiert? Wie die Familien der Mrder fr jede gettete jdische Person belohnt werden? Oder ber die Feuerballons, die aus dem Gazastreifen in den Sden Israels geschickt werden? Brita Singh, Scheeel</p>
<fig>
<img src=""images/img_8-1.jpg"" width=""596"" height=""428"" alt="""" />
<fc>
<i>stern</i> Nr. 10/2019, Bild der Woche: Kindertrauer im Gazastreifen</fc>
</fig>  
<p>
<i>Sehr geehrte Frau Singh,</i> bei Demonstrationen am Grenzzaun starben laut Bericht der UN-Kommission in neun Monaten 35 Kinder durch Schüsse israelischer Soldaten. Zwei Journalisten und drei Sanitäter wurden erschossen, über 6000 Menschen verletzt. Israel hat gerade Ermittlungen zu elf der Todesfälle aufgenommen. Dagegen hat es in dem Zeitraum kein israelisches Todesopfer am Grenzzaun zu Gaza gegeben. Die Hamas pflegt einen Märtyrerkult und belohnt Morde mit Geld; israelische Sicherheitskräfte zerstören Häuser von Angehörigen palästinensischer Attentäter. Beides fördert den Hass. Opfer sind Menschen wie das Mädchen auf diesem Bild. Der <i>stern</i> hat keinen einseitigen Blick auf die Komplexität des Nahostkonflikts wir schauen stets auf beide Seiten. <i>Mit freundlichen Grüßen Cornelia Fuchs, Ressortleiterin Ausland</i></p>
<p>Eine liebevolle Mutter will, dass ihr Kind glücklich ist, egal, ob sie sein Leben versteht. Alles andere ist Egoismus und keine Mutterliebe. </p>
<p>Annemarie Fischer, Wielenbach</p>";
        RegexOptions options = RegexOptions.Multiline;

        foreach (Match m in Regex.Matches(input, pattern, options))
        {
            Console.WriteLine("'{0}' found at index {1}.", m.Value, m.Index);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)