我想要完成的是匹配文件中的所有文本和空行,直到找到完全空行。文本本身看起来像这样:
=== Substantiv ===
Det varengångenlitenhönasomgickpåbio,fast det visste honinteförst。 Alltsåvisstehon inte。 Faständåvardet ganskaroligtförinnne。
== Annat ==
Trots att det var roligt var det inte det。
我想要匹配的是从“=== Substantiv ===”到“== Annat ==”上方的空行。由于碰巧有更多的行有三个等号,我还希望代码有点容易改为另一个词,而不是“=== Substantiv ===”。
到目前为止,我使用正则表达式尝试的是:
===Adjektiv(.|\n)+
但是你可以从结构中看出,在找到一个空行时没有绝对的方法来结束它,因为这将永远持续到我希望匹配的文本的最后。
致以最诚挚的问候,
答案 0 :(得分:2)
我建议只用空行(dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
)分割。
如果文本块中出现空行,则此方法不会很好。
/^$/igm
如果您只需要包含//Load string
var str = "===Substantiv===\nDet var en gång en liten höna som gick på bio, fast det visste hon inte först.\nAlltså visste hon inte.\nFast ändå var det ganska roligt för henne.\n\n==Annat==\nTrots att det var roligt var det inte det.";
//Split by empty line
var str = str.split(/^$/igm);
//Optional trimming
str = str.map(function(a) {
return a.toString().trim();
})
//Log results
for (var i = 0; i < str.length; i++) {
console.log(str[i]);
}
的字符串:
===Substantiv===
答案 1 :(得分:1)
您可以使用
/===Substantiv===(.*(?:\r?\n(?!\r?\n).*)*)/g
^^^^^^^^^^^^^^^^^^^^^^^^
请参阅regex demo,您的值在第1组内。您可以在找到匹配项后修剪它。
.*(?:\r?\n(?!\r?\n).*)*
部分将换行符(.*
)以外的任何零个或多个字符捕获到第1组中,然后出现零次或多次出现(由于(?:...)*
)换行符序列(\r\n
或\n
- 请参阅\r?\n
)未跟随另一个换行符序列(请参阅否定前瞻(?!\r?\n)
),然后是除行之外的任何0+字符打破符号。
请注意,它是
的展开式变体/===Substantiv===([\s\S]*?)(?=(?:\r?\n){2}|$)/g
比上面的模式慢,但看起来更具可读性。请参阅regex demo。在这里,([\s\S]*?)
在第一个双重换行符((?:\r?\n){2}
)或字符串结尾($
)之前尽可能少地捕获任何0+个字符。
如果通过空白行,则表示可能包含制表符,空格等的行,您可以使用
/===Substantiv===(.*(?:\r?\n(?!\s*\r?\n).*)*)/g
^^^
或
/===Substantiv===(.*(?:\r?\n(?![^\S\r\n]*\r?\n).*)*)/g
^^^^^^^^^^
请参阅another demo
JS演示:
var regex = /===Substantiv===(.*(?:\r?\n(?!\s*\r?\n).*)*)/g;
var str = "===Substantiv===\nDet var en gång en liten höna som gick på bio, fast det visste hon inte först.\nAlltså visste hon inte.\nFast ändå var det ganska roligt för henne.\n\n \n==Annat==\nTrots att det var roligt var det inte det.";
var res = [], m;
while ((m = regex.exec(str)) !== null) {
res.push(m[1].trim());
}
console.log(res);
// Getting all but the matches above
var regex = /===Substantiv===.*(?:\r?\n(?!\s*\r?\n).*)*/;
console.log(str.split(regex).filter(Boolean));
获取所有Substantiv
个子字符串的另一个想法:使用换行符拆分并过滤匹配:
var regex = /\r?\n\s*\r?\n/;
var str = "===Substantiv===\nDet var en gång en liten höna som gick på bio, fast det visste hon inte först.\nAlltså visste hon inte.\nFast ändå var det ganska roligt för henne.\n\n \n==Annat==\nTrots att det var roligt var det inte det.\n\n===Substantiv===\nAnother substantive";
var res = str.split(regex).filter(function (m) {return m.startsWith("===Substantiv===");}).map(function (x) {return x.substr(16).trim();});
console.log(res);