【问题标题】:How to remove uppercase characters from the end of a string when they are preceded by a lowercase character?当字符串前面有小写字符时,如何从字符串末尾删除大写字符?
【发布时间】:2017-08-02 02:11:42
【问题描述】:

我正在从 ESPN 的 BPI 页面 (http://www.espn.com/mens-college-basketball/bpi/_/view/resume) 抓取一些关于大学篮球队的数据,以存储在 pandas 数据框中。当我将 html 表读入数据框时,学校的缩写名称会附加到完整的学校名称中。例如,我有几个看起来像这样的字符串:“North CarolinaUNC”。

如何从字符串末尾删除 UNC?我尝试了以下正则表达式来匹配字符串末尾的字符:

name = "North CarolinaUNC"
name = re.sub(r"\z[A-Z]","", name)

但它不适用于名称由两个单词组成的学校。有没有办法编写一个规则,当字符串前面有小写字符时从字符串中删除大写字符?

【问题讨论】:

  • 不幸的是,\z 锚点在 python 正则表达式中不存在,您需要使用 $ 来匹配字符串的结尾或行的结尾 (取决于 m 修饰符是打开还是关闭).
  • 在 Python 中,\Z 匹配字符串的末尾。不过$这里就够了,不过应该放在右边,[A-Z]应该是+量化的。请参阅下面的答案
  • @Kaushik 您的标题与您的“有没有办法编写一条规则,当字符串前面带有小写字符时删除大写字符?”。它是哪一个?例如,我认为您不想从“Foo UNC”中删除“UNC”。对吗?
  • 对。尽管您已经回答了问题,但我刚刚更新了标题以进行澄清。

标签: python regex string


【解决方案1】:

使用$匹配字符串的结尾,不匹配的lookbehind检查大写字母是否在小写字母之后:

import re
name = "North CarolinaUNC"
name = re.sub(r"(?<=[a-z])[A-Z]+$","", name)

结果是North Carolina 没问题。

使用该表达式,"North Carolina UNC" 保持不变,因为大写字母,即使在字符串的末尾,也不会出现在小写字母之后。

【讨论】:

  • @CasimiretHippolyte 完成。我认为前瞻在我的测试中有效。我猜你有强大的远程催眠能力:)
  • “权力越大,责任越大”:Ben Parker
  • 谢谢!使用这个与威廉的答案有什么区别吗?如果我使用+$ 锚,我想我不需要检查前面的字符是否为小写,对吗?
  • Willem(现已删除)答案只是删除了字符串末尾的大写字符。没有进行进一步的检查。例如,它将“UCLA”变成空字符串......(对不起,我不是美国学校的专家,我尽力了:))
猜你喜欢
  • 2010-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多