当前位置: 首页 > 知识库问答 >
问题:

在C#中如何将一个字符串中的所有内容捕获到单独的组中?[重复]

宗烨赫
2023-03-14

我在一个文件中有一些数据,我使用< code>Regex来获取各个元素,并删除< code >之间的所有< code>\r\n

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

这是我的正则表达式:

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

带输入数据的样本

共有2个答案

仲孙兴旺
2023-03-14

如果你愿意接受额外的“_”和其他空格字符,那么我将你的模式简化如下:

var pat = @"(<(?'tag'[ph0-9figc]+)>)(?'body'([\wäöüÄÖÜß\p{P}\s])+)(<\/\k'tag'>)";

去除CR-LF的正则表达式是:

var body = m.Groups["body"].Value
   .Replace(Environment.NewLine, " ")
   .Replace("\r", " ")
   .Replace("\n", " ");
var tag = m.Groups["tag"].Value;
var noCrLf = re.Replace(text, m => $"<{tag}>{body}</{tag}>");

虽然看了你的数据,我可能不明白你在追求什么。例如,您的一个标记与您的标记模式“[ph0-9figc]”不匹配。如果我不明白你的担心,请给我指出来。

鲁博赡
2023-03-14

用正则表达式完成这项任务可能不是最好的主意,尤其是对于替换新行。

如果我们真的有必要,我们可能希望一个接一个地捕获这些标签。例如,此表达式仅使用三个捕获组< code>()来捕获< code>p标记:

(<p>)([\s\S]*?)(<\/p>)

我们还可以用 jex.im 可视化您的表情:

const regex = /(<p>)([\s\S]*?)(<\/p>)/gm;
const str = `<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>`;
let m;

while ((m = regex.exec(str)) !== null) {
    // This is necessary to avoid infinite loops with zero-width matches
    if (m.index === regex.lastIndex) {
        regex.lastIndex++;
    }
    
    // The result can be accessed through the `m`-variable.
    m.forEach((match, groupIndex) => {
        console.log(`Found match, group ${groupIndex}: ${match}`);
    });
}
 类似资料:
  • 问题内容: 我正在寻找一种方法来获取字符串中的所有字母:前,但我不知道从哪里开始。我会使用正则表达式吗?如果可以,怎么办? 有人可以给我示范我可以做什么吗? 问题答案: 只需使用该功能。它返回一个列表,因此您可以保留第一个元素:

  • 问题内容: 我试图在不区分大小写的另一个字符串中查找一个字符串所有出现的位置。 例如,给定字符串: 和搜索字符串,我想获取数组: 这两个字符串都是变量-即,我无法对它们的值进行硬编码。 我认为对于正则表达式来说这是一件容易的事,但是在努力寻找一个可行的表达式后,我却没有运气。 我找到了使用来完成此操作的示例,但是肯定有一种更简洁的方法可以完成此操作吗? 问题答案: var str = “I lea

  • 问题内容: 我要执行以下操作。 我想要所有超链接的行为进行ajax调用并检索html。 不幸的是,您不能简单地用ajax响应中收到的html替换当前的html。 如何仅获取ajax响应的标记中的内容,以便 仅 替换现有html中正文的内容。 编辑:开始标记并不总是这样,有时可能会有一个类,例如 问题答案: 如果我对您的理解正确,请使用正则表达式在body标签之间获取内容。 编辑 根据您在下面的评论

  • 更新: 错误:< code>jbyte* elements = (*env)- 我刚到JNI,所以我不熟悉JNI和英语。 现在,我尝试用Java编写简单的JNI文件读取程序,并用c语言将其写入文件 文件读取 文件编写C代码: 我已经尝试了许多解决方案(下面的链接),但没有运气将其写入文件。请提供正确的解决方案和最佳的JNI教程网站。 已经尝试解决方案:(但不成功) 将java中的字节[]转换为C中

  • 我必须定义一个包含大写方法的Translator类。该方法将收到一个StringBuffer,它只包含英文字母和空格,并将更改它,以便每个单词都以大写字母开头。 //我需要定义的类

  • 问题内容: 例如,在Python中,我可以执行以下操作: 您可以在Go中执行此操作吗? 问题答案: 我同意,只要可以管理,就应该使用这些功能。但是,如果您不控制要捕获其输出的代码,则可能没有该选项。 Mostafa的答案有效,但是如果您想在没有临时文件的情况下进行操作,则可以使用os.Pipe。这是一个与Mostafa等效的示例,其中一些代码受Go的测试包的启发。