Сопоставьте только символ между двумя другими

#python #regex

#python #регулярное выражение

Вопрос:

Я пытаюсь заменить «/» на «-» в регулярном выражении на Python, но только символ между заглавными буквами и цифрой:

 data["image_cloud"] = re.sub(r"[A-Z] (/*)[0-9]", "-", data["image_cloud"])
  

С помощью этого регулярного выражения выбираются все символы, а не только «/»

Комментарии:

1. Правильное регулярное выражение для использования является (?<=[A-Z])/*(?=d)

2. Попробуйте data["image_cloud"] = data["image_cloud"].str.replace(r"([A-Z])/([0-9])", r"1-2")

3. Если у вас есть ответ, вы должны записать его как ответ 🙂

4. @PushpeshKumarRajwanshi Большое вам спасибо, ваше решение отлично работает!

Ответ №1:

Похоже, что вы работаете с pandas , поэтому используйте str.replace как:

 data["image_cloud"] = data["image_cloud"].str.replace(r"([A-Z])/([0-9])", r"1-2")
  

В ([A-Z])/([0-9]) , ([A-Z]) — это группа захвата # 1, которая соответствует заглавной букве, и ([0-9]) — это группа захвата # 2, которая фиксирует цифру, а 1 и 2 — их соответствующие обратные ссылки в шаблоне замены.

Обратите внимание на r префикс, который обозначает необработанный строковый литерал.

Ответ №2:

следуя тому, что вы говорите, правильный шаблон:

 data["image_cloud"] = re.sub(r"(?<=[A-Z])/(?=d)", "-", data["image_cloud"])

  AZ/09 will be replaced by AZ-09
  AZ09 will not be replaced
  

будьте осторожны, если вы используете:

 data["image_cloud"] = re.sub(r"(?<=[A-Z])/*(?=d)", "-", data["image_cloud"])

  AZ/09 will be replaced by AZ-09
  AZ09 will be replaced by AZ-09 (also)