删除非数字字符,包括构成URL的数字

2024-10-03 21:26:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串,它由一组数字和一个URL组成。我只需要所有数字字符,除了附加到URL的字符。下面是我删除所有非数字字符的代码,但它不会从URL中删除数字

test = '4758 11b98https://www.website11/111'
re.sub("[^0-9]","",test)

expected result: 47581198

Tags: 字符串代码testreurlwww数字result
3条回答

请检查以下表达式:

y=re.compile('([0-9]+)(?=.*http)')
tokens = y.findall(test)
print(''.join(tokens))
原始答案

改变策略,只保留领先数字而忽略其余数字要容易得多:

import re
test = '47581198https://www.website11/111'
re.findall(r'^\d+', test)[0]

或者,如果不确定前导数字是否存在,则使用匹配:

m = re.match(r'\d+', test)
if m:
    m = m.group()

输出:'47581198'

问题更改后编辑

如果您确定“http://”字符串不能是您的初始数字

然后您需要两个过程,一个用于删除URL,另一个用于清除数字

test = '4758 11b98https://www.website11/1111'
re.sub('\D', '', re.sub('https?://.*', '', test))

输出:'47581198'

您可以匹配包含https://或http://的字符串,以不捕获附加到它的数字,并使用替代|来捕获组1中的其他数字

然后在输出中,用空字符串连接组1中的所有数字

https?://\S+|(\d+)

Regex demoPython demo

比如说

import re

pattern = r"https?://\S+|(\d+)"
s = "4758 11b98https://www.website11/111"

print(''.join(re.findall(pattern, s)))

输出

47581198

相关问题 更多 >