如何在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
    -一个数字
  • ([^\ud]+)
    -第1组匹配和捕获(
    m.Group(1)
    将保存此值)1+字符,而不是数字和
    (您甚至可以使用
    ([a-zA-Z]+)
    匹配1+ASCII字母)
  • \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'
作为字符串