Как заменить одиночный di git на тот же di git с последующей пунктуацией? - PullRequest
1 голос
/ 09 июля 2020

Я хочу заменить любой отдельный di git тем же di git, за которым следует пунктуация (запятая), используя python regex?

text = 'I am going at 5pm to type 3 and the 9 later'

Я хочу, чтобы это было преобразовано в

text = 'I am going at 5pm to type 3, and the 9, later'

Моя попытка:

match = re.search('\s\d{1}\s', x)

Я смог их обнаружить, но не знаю, как заменить их тем же di git, за которым следует запятая.

Ответы [ 2 ]

3 голосов
/ 09 июля 2020

Regex # 1

См. Здесь используемое регулярное выражение

(?<=\b\d)\b

Заменить на ,

Как это работает:

  • (?<=(?:)\d) положительный просмотр назад, гарантирующий следующее:
    • \b утверждение позиции как границы слова
    • \d соответствие di git
  • \b заявить позицию как границу слова

Чтобы предотвратить совпадение мест, подобных 3, a, просто добавьте (?!,) к регулярному выражению.

Regex # 2

Чтобы предотвратить сопоставление одного di git в начале и конце строки, вы можете использовать следующее регулярное выражение:

См. Используемое регулярное выражение здесь

(?<=(?<!^)\b\d)\b(?!$)

То же, что и выше, регулярное выражение, но добавляет следующее:

  • (?<!^) гарантирует, что граница слова \b, которая предшествует, не соответствует началу строки
  • (?!$) убедитесь, что граница слова \b, за которой она следует, не соответствует концу строки

Вы можете удалить любой токен, если это не поведение вы хотите.

Чтобы предотвратить совпадение местоположений вроде 3, a, просто измените отрицательный просмотр вперед на (?!,|$) или добавьте (?!,) в регулярное выражение.

Regex # 3

Если \b нельзя использовать (например, если у вас есть числа вроде 3.3), вы можете вместо этого использовать следующее:

См. Здесь используемое регулярное выражение

(?:(?<=\s\d)|(?<=^\d))(?=\s)

Как это работает:

  • (?:(?<=\s\d)|(?<=^\d)) соответствует любому из следующих значений:
    • (?<=\s\d) положительный просмотр назад обеспечение того, что предшествует, является пробельным символом
    • (?<=^\d) положительный просмотр назад, гарантирующий, что то, что предшествует, является началом строки
  • (?=\s) положительный просмотр вперед, гарантирующий, что последующее является пробелом символ

Regex # 4

Если вам не нужно сопоставлять цифры в начале строки, измените второе регулярное выражение, удалив второй просмотр назад как таковой:

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

(?<=\s\d)(?=\s)

Код

Пример кода (замените шаблон регулярного выражения на тот, который вам больше подходит):

import re

x = 'I am going at 5pm to type 3 and the 9 later'
r = re.sub(r'(?<=\b\d)\b', ',', x)
print(r)
2 голосов
/ 09 июля 2020

Для этого можно использовать границу слова и группу захвата:

import re

text = 'I am going at 5pm to type 3 and the 9 later'
re.sub(r'\b(\d)\b', r"\1,", text)
# => 'I am going at 5pm to type 3, and the 9, later'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...