我有一个类似于a = 'readyM01JUN_01_18_0144.xlsx'
的字符串,我想梳理JUN
。
我认为首先尝试将a
与数字分开,但a.split('[0-9]+')
不起作用。有什么想法吗?
答案 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