假设你有很多文本文件它们都包含这样一行:
Sprachen: Deutsch, Englisch
Spricht: Englisch;
Italienisch
Sprachen: wenig Deutsch, Englisch
sprachen:ndeutsch russisch
spricht: wenig Englisch Russischn
etc...
如何将列出的语言提取到字符串数组中?
我构造了一个正则表达式:
(sprachen*|spricht):+s*(w+[s,;]*w*)
但是在列表的第二个单词之后无法匹配。如果第二个和第三个单词之间有空格。所以我不能得到完整的语言列表。
如果你事先不知道所有可能的语言列表,另一种方法是在处理之前清理字符串:您可以将其转换为小写,替换所有出现的额外单词('sprachen', ' spright ', '等等…', 'wenig',等)和分隔符(冒号,分号,等)。
这样就很容易找到所有的语言了。
let str = `Sprachen: Deutsch, Englisch
Spricht: Englisch;
Italienisch
Sprachen: wenig Deutsch, Englisch
sprachen:ndeutsch russisch
spricht: wenig Englisch Russischn
etc...`;
str = cleanStr(str);
let langs = [];
str.split('n').forEach(row => {
row = row.trim();
if (row) {
row.split(' ').forEach(lang => {
lang = lang.trim();
if (!langs.includes(lang)) {
langs.push(lang);
}
});;
}
});
console.log(langs);
function cleanStr(str) {
str = str.toLowerCase();
str = str.replace(/(sprachen|spricht):(s)+/g, '');
str = str.replace(/wenig /g, '');
str = str.replace(/;/g, '');
str = str.replace(/,/g, '');
str = str.replace(/etc.../g, '');
return str;
}