регулярное выражение - сопоставлять только кавычки, окружающие числовые значения - PullRequest
0 голосов
/ 24 января 2019

Поэтому я использую много регулярных выражений для форматирования SQL.

Я пытаюсь сопоставить все кавычки, окружающие числовые значения (INT), чтобы я мог их удалить.

Я использую это для сопоставления чисел в qoutes:

(?<=(['"])\b)(?:(?!\1|\\)[0-9]|\\.)*(?=\1)

Пока что играю с этим, но пока не повезло:

'(?=[0-9](?='))*

То, что я пытаюсь сказать, это смотреть вперед на бесконечность, сопоставляя все, что является числом, если только это не кавычка, затем принять, затем сопоставить.

Любой ниндзя-регулярник может помочь мне найти путь?

Вот пример строки:

'2018-12-09 07:29:00.0000000', 'US', 'MI', 'Detroit', '48206', '505', '68.61.112.245', '0', 'Verizon'

Я просто хочу сопоставить ' вокруг 48206, 505 и 0, чтобы я мог их убрать.

На всякий случай предположим, что в тестовой строке могут быть и другие символы.то есть - на самом деле невозможно сказать, просто сопоставить все, что не является тире буквой или точкой и т. д. Кроме того, вопрос не зависит от языка, поэтому подходит любой подходящий язык - JavaScript, Python, Java и т. д.

Ответы [ 3 ]

0 голосов
/ 24 января 2019

Вы можете захватить одинарную или двойную кавычку, как в первом регулярном выражении в группе захвата, а затем захватить цифры между двумя группами и, наконец, использовать обратную ссылку на группу 1

При замене используйте вторую группу захвата $2, например

(['"])(\d+)\1

Пояснение

  • (['"]) Захват 'или' в группе захвата
  • (\d+) Захват 1+ цифр в группе
  • \1 Обратная ссылка на группу 1

Regex demo

Результат

''2018-12-09 07:29:00.0000000', 'US', 'MI', 'Detroit', 48206, 505, '68.61.112.245', 0, 'Verizon''
0 голосов
/ 24 января 2019

.split().join() Цепь

.split() может использовать RegEx, например:

 /'\b([0-9]+?)\b'/
  • Буквенное совпадение одинарная прямая кавычка: '

  • Граница слова метапоследовательности устанавливает начало слова / числа: \b

  • Группа захвата: ( диапазон классов: [ любой цифры: 0-9]

  • Подберите хотя бы один раз и продолжайте делать это до тех пор, пока не будет достигнута граница следующего слова и не будет прямой одинарной кавычки: )+?\b'

Поскольку .split() перебирает строку, флаг g lobal не требуется. .join(''); связан с .split(), и результат возвращается к строке из массива am.

Демо

var strA = `'2018-12-09 07:29:00.0000000', 'US', 'MI', 'Detroit', '48206', '505', '68.61.112.245', '0', 'Verizon'`;

var strB = strA.split(/'\b([0-9]+?)\b'/).join('');

console.log(strB);
0 голосов
/ 24 января 2019

Вы можете выбрать все такие числа, используя это регулярное выражение,

'(\d+)'

А затем замените его на \1 или $2 в соответствии с вашим языком.

Демо

Это избавит от всех кавычек, окружающих числа.

Дайте мне знать, если это работает для вас.

Кроме того, в качестве альтернативного решения, если ваш движок регулярных выражений поддерживает ECMAScript 2018, то вы можете использовать переменную длину, оглядываться назад и использовать это регулярное выражение для выбора только кавычек, окружающих число,

'(?=\d+')|(?<='\d+)'

И заменить его пустой строкой.

Демо

Убедитесь, что вы проверили это демо в Chrome, который поддерживает его, а не в Mozilla, который его не поддерживает.

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