如何在python中获取两个数字(数字长度未知)之间的子字符串
我有一个字符串,看起来像这样如何在python中获取两个数字(数字长度未知)之间的子字符串,python,regex,python-3.x,Python,Regex,Python 3.x,我有一个字符串,看起来像这样a='readyM01JUN\u 01\u 18\u 0144.xlsx',我想梳理出JUN 我原以为第一次尝试根据数字拆分a,但是a.split(“[0-9]+”)不起作用。有什么想法吗?因为a是一个字符串,所以在您的例子中,split只接受要拆分的文本字符串,而不是正则表达式。要使用正则表达式模式进行拆分,需要re.split 但是,您可以使用 import re a = 'readyM01JUN_01_18_0144.xlsx' m = re.search(r'
a='readyM01JUN\u 01\u 18\u 0144.xlsx'
,我想梳理出JUN
我原以为第一次尝试根据数字拆分
a
,但是a.split(“[0-9]+”)
不起作用。有什么想法吗?因为a
是一个字符串,所以在您的例子中,split
只接受要拆分的文本字符串,而不是正则表达式。要使用正则表达式模式进行拆分,需要re.split
但是,您可以使用
import re
a = 'readyM01JUN_01_18_0144.xlsx'
m = re.search(r'\d([^_\d]+)_\d', a) # Or, r'\d([a-zA-Z]+)_\d'
if m:
print(m.group(1))
见
图案细节
-一个数字\d
-第1组匹配和捕获(([^\ud]+)
将保存此值)1+字符,而不是数字和m.Group(1)
(您甚至可以使用
匹配1+ASCII字母)([a-zA-Z]+)
-一个\ud
和一个数字\ud
请注意,
re.search
返回第一个最左边的匹配项。不确定您的计划目标是什么,但是如果JUN代表June,并且您有一系列的月份和数据,并且希望将它们全部删除,我将创建一个月份列表,遍历它们,然后在您正在处理的特定字符串中替换它们。可以通过在上使用.remove()变量,然后将其作为新变量a的值,从字符串中提取JUN,因为字符串是不可变的。以下是一个例子:
months = ['JAN', 'FEB', 'APR', 'MAY', 'JUN', 'JUL', 'AUG', 'SEPT', 'OCT', 'NOV', 'DEC']
a = 'readyM01JUN_01_18_0144.xlsx'
for month in months:
if month in a:
a = a.replace(month, '')
print(a)
输出:
readyM01_01_18_0144.xlsx
您也可以尝试这样的迭代方法:
import re
def remove_string(string, sub):
res = string
reduce = 0
for loc in re.finditer(sub, string):
res = res[:loc.start()+reduce] + res[loc.start()+len(sub)+reduce:]
reduce -= len(sub)
return res
哪些产出:
>>> remove_string('readyM01JUN_01_18_0144.xlsx', 'JUN')
readyM01_01_18_0144.xlsx
>>> remove_string('readyM01JUN_01_18_0144JUN.xlsx', 'JUN')
readyM01_01_18_0144.xlsx
根据您真正想要的内容,
re.search(r'\d(\d+)\d',s).组(1)
或re.search(r'\d([^\d]+)\d',s).组(1)
。如果a
是字符串,那么在您的示例中,split
只接受要拆分的文本字符串,而不是正则表达式。要使用正则表达式模式进行拆分,您需要re.split
@anubhava我编辑了标题,我希望现在可以更清楚地看到,什么是输入字符串示例(a='readyM01JUN\u 01\u 18\u 0144.xlsx'
或只是readyM01JUN\u 01\u 18\u 0144.xlsx
)以及您想要什么输出?@nandal我想要作为输出JUN
,输入是a='readyM01JUN\u 01\u 18\u 0144.xlsx'
作为字符串