如何从长度未知的字符串中提取已知数字



假设我有几个字符串,看起来像:

data_20220110_073030.gz
ndsfhsfihso_20100330-100210.gz
l0dnd74n-19981001.180800.gz

我只想提取上面有8或6个数字的信息,这些数字都是0-9之间的数值。理想情况下,它将输出到单个数组/列表,例如:

[20220110,073030]
[20100330,100210]
[19981001,180800]

我知道可以使用regex,但我似乎无法将其放入数组中。

您可以使用以下模式:

(?<!d)d{6}(?:dd)?(?!d)

演示

详细信息:

  • (?<!d)-前面没有数字
  • d{6}-精确匹配6位数字
  • (?:dd)?-和(可选(两位以上数字
  • (?!d)-不紧跟数字

Python示例:

import re
regex = r"(?<!d)d{6}(?:dd)?(?!d)"
test_str = """data_20220110_073030.gz
ndsfhsfihso_20100330-100210.gz
l0dnd74n-19981001.180800.gz"""
arr = re.findall(regex, test_str)
print(arr)

输出:

['20220110', '073030', '20100330', '100210', '19981001', '180800']

在线试用

您可以使用python正则表达式库来查找组成搜索模式的字符序列

示例

import re
text = 'data_20220110_073030.gz ndsfhsfihso_20100330-100210.gz l0dnd74n 19981001.180800.gz'
x = re.findall('dddddd', text) #for 6 digits sequence
y = re.findall('dddddddd', text) #for 8 digits sequence
print(y)
print(x)

你可以通过让一个函数根据你想要的的数字长度创建模式来改进这一点

import re
def digitSequence(length: int, text: str):
pattern = ''
for i in range(length):
pattern += 'd'

return re.findall(pattern, text) # returns a list of match's found
print(digitSequence(8, text))
print(digitSequence(6, text))

最新更新