如何在python中获取两个数字(未知数字长度)之间的子串

时间:2018-06-07 08:21:31

标签: python regex python-3.x

我有一个类似于a = 'readyM01JUN_01_18_0144.xlsx'的字符串,我想梳理JUN

我认为首先尝试将a与数字分开,但a.split('[0-9]+')不起作用。有什么想法吗?

3 个答案:

答案 0 :(得分:2)

由于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))

请参阅Python demo

模式详情

  • \d - 数字
  • ([^_\d]+) - 第1组匹配和捕获(m.group(1)将保留此值)1 +字符以外的数字和_(您甚至可以使用([a-zA-Z]+)来匹配1 + ASCII字母)
  • _\d - _和数字。

请参阅regex demo

请注意,re.search会返回第一个最左边的匹配。

答案 1 :(得分:1)

不确定您的计划目标是什么,但如果JUN代表6月,并且您有一系列月份和数据并想要将它们全部删除,我会创建一个月份列表,迭代它们,然后替换它们在您正在处理的特定字符串中。您可以通过在a上使用.remove()变量从字符串中获取JUN,然后将其作为新变量a的值放置,因为字符串是不可变的。这是一个例子:

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

答案 2 :(得分:0)

您也可以尝试这样的迭代方法:

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