gpt4 book ai didi

Python Regex 更长的连字符和前面的字母

转载 作者:行者123 更新时间:2023-12-04 15:10:09 25 4
gpt4 key购买 nike

我有一个 DataFrame,其中一些值存储为“Miami–Fort Lauderdale”和“Minneapolis–Saint Paul”,带有较长的连字符“–”(不是短破折号“-”)。我试图在 Windows 命令提示符下使用正则表达式删除它们,但它无法正常工作。

  1. 直接输入下面的连字符是行不通的(werid enough):
XXX.replace(to_replace=r'\–', value=' ', regex=True)

XXX.replace(to_replace='–', value=' ')

并给出不变的“迈阿密-劳德代尔堡”和“明尼阿波利斯-圣保罗”。因此,我想出于某种原因 cmd 无法识别连字符。

  1. 一般的形式是“小写字母+连字符+大写字母”所以我也试过了
XXX.replace(to_replace=r'(?=[a-z]+)\W(?=[A-Z]+)', value=' ', regex=True)

有趣的是,这给出了不变的“迈阿密-劳德代尔堡”和“明尼阿波利斯-圣保罗”

  1. 但是,下面的方法会起作用
XXX.replace(to_replace=r'\W(?=[A-Z]+)', value=' ', regex=True)

并给出所需的“迈阿密劳德代尔堡”和“明尼阿波利斯圣保罗”。但问题在于,这会扰乱其他值,例如“华盛顿特区”。进入“华盛顿特区”。 (显然)。

============================================= ======

我最终解决了这个问题

XXX.replace(to_replace=r'\W(?=\w+\s)', value=' ', regex=True)

但我仍然想知道正则表达式如何识别连字符“–”之前的字母。在我看来,好像出于某种原因,连字符之前的字母不被视为字母?

最佳答案

我建议使用

.replace(to_replace=r'(?<=[a-z])[^\w\s](?=[A-Z])', value=' ', regex=True)

这里,

  • (?<=[a-z]) - 与紧接在前面的小写 ASCII 字母匹配的位置的正后视
  • [^\w\s] - 除了单词和空白字符以外的字符
  • (?=[A-Z]) - 与紧跟大写 ASCII 字母的位置匹配的正前瞻。

参见 regex demo online .

另外,请注意 \w匹配一个下划线,它也是一个标点符号。如果您需要在此处“包含”它,则需要进行替换:

(?<=[a-z])(?:[^\w\s]|_)(?=[A-Z])

关于Python Regex 更长的连字符和前面的字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65354883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com