在其他两个字符之间仅匹配一个字符

时间:2019-04-01 11:39:43

标签: python regex

在Python的正则表达式中,我尝试将“ /”替换为“-”,但只能使用大写字母和数字之间的一个:

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

使用此正则表达式,它会选择所有字符,而不仅是“ /”

2 个答案:

答案 0 :(得分:0)

您似乎正在使用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是它们在替换模式中的对应反向引用。

注意表示 raw 字符串文字的r前缀。

答案 1 :(得分:0)

按照您所说的,正确的模式是:

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)