RegEx для захвата конкретного буквенно-цифрового шаблона - PullRequest
1 голос
/ 22 мая 2019

У меня есть эта строка, и я хочу знать, как извлечь часть "10-K_20190304_29_1_20190515".

"nCABALLERO MARIA\r\n10.1-K\r\n10-K_20190304_29_1_20190515\r\n6204 DEPORTES SANTIAGO - PEÑALOLÉN"

Я пробовал это, .+(?<=_).+, но это приносит мне больше символов, которые мне нужны.

Как мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 22 мая 2019

Здесь нам нравится начинать с простой левой и правой границ, собирать данные о наших желаниях и сохранять их в группе захвата ($1). Начнем с:

[0-9]{2}-.+[0-9]{8}

и давайте добавим нашу группу захвата:

([0-9]{2}-.+[0-9]{8})

DEMO

const regex = /[0-9]{2}-.+[0-9]{8}/gm;
const str = `nCABALLERO MARIA\\r\\n10.1-K\\r\\n10-K_20190304_29_1_20190515\\r\\n6204 DEPORTES SANTIAGO - PEÑALOLÉN`;
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}`);
    });
}

enter image description here

RegEx

Если это выражение нежелательно, его можно изменить или изменить в regex101.com .

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here


Если мы хотим добавить больше границ, мы можем сделать это, в зависимости от того, как могут выглядеть наши возможные входные данные. Например, это выражение имеет больше границ:

([0-9]{2}-[A-Z]+_[0-9]{8}[0-9_]+.+?[0-9]{8})

DEMO

const regex = /([0-9]{2}-[A-Z]+_[0-9]{8}[0-9_]+.+?[0-9]{8})/gm;
const str = `nCABALLERO MARIA\\r\\n10.1-K\\r\\n10-K_20190304_29_1_20190515\\r\\n6204 DEPORTES SANTIAGO - PEÑALOLÉN`;
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}`);
    });
}
0 голосов
/ 23 мая 2019

Вы также можете использовать разделение для извлечения детали "10-K_20190304_29_1_20190515".

text.Split({“\r\n”},StringSplitOptions.None)(2)

enter image description here

...