如何从文本中删除一定长度的数字?

时间:2019-03-26 03:45:15

标签: python regex

我想通过从文本中删除一定长度的数字来净化文本,因此我为文本定义了规则。我认为isdigit很适合处理,但是如果我使用它,它将丢弃文本中的所有数字。在我的测试中,最后10位数字没有贡献给文本,因此我可以将其删除。这是我尝试过的:

urls = ['variety.com/2017/biz/news/tax-march-donald-trump-protest-1202031487/',
        'variety.com/2018/film/news/list-2018-oscar-nominations-1202668757/']

cols = ['c1', 'c2', 'c3', 'c4']
make_me = []
for url in urls:
    lst = url.split("/")
    # your business rules go here
    make_me.append([x for x in lst if not x.isdigit() and not x == ""])

df = pd.DataFrame(make_me, columns=cols)
df

res=[]
for i in df.c4: 
    lst=i.split("-") 
    res.append([''.join(x) for x in lst if not x.isdigit()])

我的尝试放弃了文本中的所有数字。我只想要这种输出:

tax march donald trump protest
list 2018 oscar nominations

如何编写规则以获取此输出?有想法吗?

4 个答案:

答案 0 :(得分:1)

假设您要提取相同格式的网址,请使用正则表达式

import re

urls = ['variety.com/2017/biz/news/tax-march-donald-trump-protest-1202031487/',
        'variety.com/2018/film/news/list-2018-oscar-nominations-1202668757/']
news = []
regex =re.compile(r'/news/(.*)-')
for url in urls:
    extract_id = regex.search(url)
    if extract_id:
        data = extract_id.group(1)
        news.append(data.replace('-',' '))

print(news)

输出

['tax march donald trump protest', 'list 2018 oscar nominations']

已修改格式以适合该问题。

答案 1 :(得分:1)

没有其他模块的纯python方式如下:

urls = ['variety.com/2017/biz/news/tax-march-donald-trump-protest-1202031487/',
        'variety.com/2018/film/news/list-2018-oscar-nominations-1202668757/']

for x in urls:
    print(' '.join(x.rsplit('/', 2)[-2].split('-')[:-1]))

# tax march donald trump protest
# list 2018 oscar nominations

如果需要输出列表,请使用列表理解:

[' '.join(x.rsplit('/', 2)[-2].split('-')[:-1]) for x in urls]

答案 2 :(得分:0)

可以有很多方法。使用.rfind('-')来获取'-'的最右边的索引,然后对字符串进行切片。之后,您可以进一步处理字符串。

答案 3 :(得分:0)

在这种情况下,您有一条非常具体的规则可以帮助您-只需从最后一个有趣的元素中删除最后10个字符即可。 在这种情况下,lst[-2] = lst[-2][:-12]调用之前的make_me.append可以解决问题。

如果您确实想使用正则表达式,则可以使用行尾标记$来确保数字位于末尾。看起来像 lst = re.sub('[0-9]{10}/$','',url)

当然,在导入re之后

。内容为:

re.sub是正则表达式模块中的一种替换方法,它将第一个参数中与正则表达式的匹配更改为第二个参数中的内容;第三个参数是您要替换的字符串。

我写的正则表达式匹配“由10个字符组成的序列,它们与0123456789中的任何一个匹配,后跟一个/和字符串的结尾”。