Как я могу использовать регулярные выражения для вставки запятых в большие целые числа? - PullRequest
2 голосов
/ 24 сентября 2019

У меня есть текстовый документ с большим количеством больших целых чисел, например, 123456789. Я хочу автоматически вставить в них запятые, чтобы сделать их более удобочитаемыми: 123 456 789.Тем не менее, мой документ также содержит десятичные дроби, и они должны остаться нетронутыми.Есть ли регулярные выражения, которые будут вставлять их?Ответ на аналогичный вопрос предполагает (?<=\d)(?=(\d\d\d)+(?!\d)), но он также обнаруживает десятичные числа.Более того, я не могу вставить запятые, используя Notepad ++ или Overleaf.Чем я должен заменить это регулярное выражение?

Ответы [ 2 ]

2 голосов
/ 24 сентября 2019

Если вы не хотите прикасаться к десятичным знакам, вы можете использовать (* SKIP) (* FAIL) , чтобы сопоставить точку и 1+ цифры, чтобы использовать символы, которые не должны быть частью совпадения..

(проверено на Notepad ++ 7.7.1)

\.\d+(*SKIP)(*FAIL)|\B(?=(?:\d{3})+(?!\d))

При замене используйте запятую ,

В деталях

  • \.\d+(*SKIP)(*FAIL) Совпадение точки буквально и 1+ цифр (совпадение, которое следует оставить без изменений)
  • | Или
  • \B Якорь , который совпадает с \bне совпадает
  • (?= Позитивный взгляд, утверждают, что прямо справа есть
    • (?:\d{3})+ Повторить 1+ раз, сопоставляя 3 цифры
    • (?!\d) Отрицательный взгляд, утверждайте, что прямо справа не является цифрой
  • ) Закрыть взгляд

Regex demo

0 голосов
/ 24 сентября 2019

Я думаю, что, возможно,

(?<=\d)(?=(?:\d{3})+(?!\d|\.))

или

(?!^)(?=(?:\d{3})+(?!\.|\d))

Демо 2

или

\d+\.\d*(*SKIP)(*FAIL)|(?!^)(?=(?:\d{3})+(?!\.|\d))

Демо 3

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


Если вы хотите упростить / изменить / изучить выражение, это было объяснено на верхней правой панели regex101.com .Если хотите, вы также можете посмотреть в эту ссылку , как она будет сопоставляться с некоторыми примерами ввода.


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