我的文件中有一些数据,我正在使用Regex
获取单个元素并删除\r\n
和<opening>
标签之间的所有</closing>
。
但是当我尝试分别选择elements
时,最后,整个数据将被选择为一组。
这是我的正则表达式:
(<([ph0-9figc]+)>)([a-zA-Z0-9äöüÄÖÜß[:punct:] \n\r\t])+(<\/\2>)
进行采样
答案 0 :(得分:6)
使用正则表达式执行此任务可能不是最好的主意,尤其是对于替换新行。
如果确实需要,我们可能希望一一捕获这些标签。例如,此表达式仅使用三个捕获组current.next
捕获p
标签:
()
我们还可以在jex.im中可视化您的表情:
(<p>)([\s\S]*?)(<\/p>)
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}`);
});
}
答案 1 :(得分:2)
如果您愿意接受多余的“ _”和其他空格字符,那么我将您的模式简化如下:
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] +”不匹配。如果我不明白您的担心,请理顺我。