Регулярное выражение для сопоставления n цифр, игнорируя пробелы и символы - PullRequest
1 голос
/ 18 марта 2020

Мне трудно найти информацию о регулярных выражениях, и я все еще борюсь с ней.

Допустим, у нас есть это:

0123 4567 8910

В примере есть пробелы но они могут быть - или , или + или чем-то, что не является числом.

Я пытаюсь получить 10 цифр (или 5 или 11), определяемых по отдельности, игнорируя все остальные символ, отличный от di git.

Использование этого: [0-9] соответствует когда-либо di git, я знаю. Если я сделаю что-то подобное [0-9] {10}, я бы никогда ничего не проверил, так как этот шаблон ищет все 10 цифр, чтобы быть вместе, и мне нужно регулярное выражение, чтобы посчитать эти 10 по одной, независимо от того, отличается ли это от git находится в строке ...

Я работал с этим регулярным выражением: [0-9](?=(?:[^0-9]*[0-9]){4,16}(?![^0-9]*[0-9]))

Дело в том, что это обнаруживает все, кроме последних 4 цифр, а не специфика c 10 Мне нужно ... Любой совет по этому вопросу будет высоко оценен ...

РЕДАКТИРОВАТЬ

Я смог сделать это ... другим способом, Я имею в виду, что я смог оставить 10 непомеченных символов ... Мне нужно сделать опозицию так, как это регулярное выражение работает:

[0-9](?=(?:[^0-9]*[0-9]){10,}(?![^0-9]*[0-9]))

Вот Пример.

Это цель. Используя регулярное выражение, получите 5, 10 или 12 первых символов, таких как это (пример 12 символов):

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

Ответы [ 4 ]

1 голос
/ 18 марта 2020

Попробуйте это:

/(\d\D*){10}/

(группа из ди git, за которой следуют ноль или более не цифр, повторяющихся 10 раз)

Чтобы получить цифры только:

let arr = '0123 4567 8910'
          .match(/(\d\D*){10}/)[0]
          .split(/\D+|/)

console.log(arr)
0 голосов
/ 19 марта 2020

Еще один способ получить те же результаты, не используя регулярное выражение:

num_of_digits = 10    
results = [int(x) for x in input_string if x.isdigit()][:num_of_digits]
0 голосов
/ 19 марта 2020

Вы можете использовать приведенное ниже регулярное выражение для подтверждения:

  • строка начинается и заканчивается ди git и содержит только цифры и четыре символа в строке ", +-";
  • никакие два символа в строке ", +-" не могут появляться последовательно; и
  • строка содержит указанное количество цифр (10 цифр в ссылке).

    ^ (? = \ d [\ d, + -] \ d $) (?!. [, + -] {2}) (? = (?: \ D * \ d) {10} \ D * $)

Javascript demo

Для каждой строки, соответствующей этому регулярному выражению, просто извлеките цифры (возможно, преобразовав все нецифровые в пустые строки).

Регулярное выражение выполняет следующие операции:

^                 # match beginning of string
(?=               # begin a positive lookahead
  \d[\d ,+-]*\d   # match 1 digit, 0+ chars in char class, 1 digit
  $               # match end of line
)                 # end positive lookahead
(?!               # begin negative lookahead
  .*              # match 0+ chars
  [ ,+-]{2}       # match 2 chars in the char class
)                 # end negative lookahead
(?=               # begin a positive lookahead
  (?:\D*\d)       # match 0+ non-digits followed by 1 digit
  {10}            # execute non-capture group 10 times
  \D*             # match 0+ non-digits
  $               # match end of line
)                 # end positive lookahead
0 голосов
/ 18 марта 2020

Я предполагаю, что вы хотите сопоставить n начальные цифры (если их больше, вы хотите пропустить цифры суперфлуо).

Чтобы сделать это, вам нужен двухэтапный подход:

  • отбросить все не-ди git символы,
  • попытка сопоставить n цифр в результате.

Чтобы express указать его в JavaScript коде, определите следующую функцию:

function mtch(str, cnt) {
    return str.replace(/\D+/g, '').match(new RegExp('\\d{' + cnt + '}'));
}

Затем, когда вы вызываете его, пытаясь сопоставить существующее количество цифр:

var str = '0123 4567 8910';
res = mtch(str, 8);

вы получите 01234567.

Но если вы попытаетесь сопоставить несуществующее количество цифр, например,

res = mtch(str, 18);

, вы получите null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...