【问题标题】:How to remove string numbers with regex如何使用正则表达式删除字符串数字
【发布时间】:2021-06-25 02:52:48
【问题描述】:

我有这个字符串,我想删除有两个小数位和三个小数位的数字,但是,对于包含两个小数位的数字,我不想删除字符串中的前两个数字,这是我的代码。

import re
string = "air max 12 x clot infantil 16 26 67 80 272 117 160"
regex = re.sub(r"\d{3}", "", string)           
print(regex)

请注意,我可以消除小数点后 3 位的数字,但不能消除小数点后两位的数字。即使我的代码是这样的:

import re
string = "air max 12 x clot infantil 16 26 67 80 272 117 160"
regex = re.sub(r"\d{2,3}", "", string)           
print(regex)

这行得通,问题是它会删除前两个小数点后两位的数字,我想要的输出是:

import re
string = "air max 12 x clot infantil 16 26 67 80 272 117 160"
regex = re.sub(r"\d{2,3}", "", string)
//something here
print(regex)
Expected output
air max 12 x clot infantil

如何使用正则表达式来做到这一点?

【问题讨论】:

  • 在您的示例中,数字字符串中没有小数位,您的意思是长度为 2 还是 3?
  • 你是对的,我在小数位方面是错误的,但我想我或多或少可以理解这个问题,如果我不能编辑
  • @etch_45 是的,我是认真的

标签: python python-3.x python-2.7


【解决方案1】:

您可以使用以下正则表达式:'[a-zA-Z].*[a-zA-Z]',它将匹配从字母开始并以字母结尾的任何内容。

>>> re.findall('[a-zA-Z].*[a-zA-Z]', string)
['air max 12 x clot infantil']

【讨论】:

  • 这正是我需要的,但我不想把它留在列表中[]
  • 只需从中取出第一项。
  • 我没有在问题中提到它,但是我会有很多项目,我无法知道所有索引,虽然我可以通过for查看列表,你有什么解决办法吗? +1
  • 您可以只迭代列表,也可以只使用re.finditer 获取匹配的迭代器并对其进行迭代。另外最好添加这样一个匹配的示例我没有在问题中提到它,但我会有很多项目
  • Obs,我注意到如果我将字符串更改为“air max 90”,它只会显示“air max”,为什么会这样?
猜你喜欢
  • 2011-03-22
  • 1970-01-01
  • 1970-01-01
  • 2011-05-13
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
相关资源
最近更新 更多