我有一些文件名的信息,我需要提取,信息是字符串中的一个或两个数字。我有代码做一个数字或两个数字,但我不能让它的工作来处理两者。我看过这个Regex匹配两个单词中的一个,但看不出如何适应或使用它。
from os import listdir
from os.path import isfile, join
import re
mylist = [r"C:...A000-2021_6D_16GL_-do_not_use.txt",
r"C:...A000-2021_6D_8GL_-do_not_use.txt"]
def volts_from_filename(filename):
regexList = ['-dL', '_dL', '_dGL', '-dGL', '-ddL', '_ddL', '_ddGL', '-ddGL']
for reggie in regexList:
result = re.search(reggie, filename)
print(f"result : {result}")
if result:
match = result.group(0)
print(f"match {match}")
reg_exp = 'dd'
result = re.search(reg_exp, match)
file_volts = int(result.group(0))
max_volts = file_volts - 1
print(f"File Volts: {file_volts} Max volts : {max_volts}volts")
return file_volts, max_volts
for filename in mylist:
print('n'*2)
volts_from_filename(filename)
result : None
result : None
result : None
result : None
result : None
result : None
result : <re.Match object; span=(19, 24), match='_16GL'>
match _16GL
result : None
File Volts: 16 Max volts : 15volts
result : None
result : None
result : <re.Match object; span=(19, 23), match='_8GL'>
match _8GL
想要回报
File Volts: 16 Max volts : 15volts
File Volts: 8 Max volts : 7volts
<<p>错误对话框/strong>NoneType error object has no attribute 'group'.
Line 34 volts_from_filename(filename)
line 24 in volts from filename
file_volts = int(result.group((0))
在第二种情况下,没有与reg_exp = 'dd'
匹配,因为只有一个数字。
你可以用一个正则表达式来解决这个问题:
def volts_from_filename(filename):
result = re.search(r"[-_](d+)G?L", filename)
if result:
file_volts = int(result.group(1))
max_volts = file_volts - 1
print(f"File Volts: {file_volts} Max volts : {max_volts}volts")
return file_volts, max_volts
您不需要那么多regex,可以处理所有情况,然后使用捕获组(括号)仅获取数值
def volts_from_filename(filename):
file_volts, max_volts = 0, 0
result = re.search(r'[_-](d{1,2})G?L', filename)
if result:
file_volts = int(result.group(1))
max_volts = file_volts - 1
print(f"File Volts: {file_volts} Max volts : {max_volts} volts")
return file_volts, max_volts
File Volts: 16 Max volts : 15 volts
File Volts: 8 Max volts : 7 volts
尝试regex101.com网站,这对我学习regexp有很大帮助。最好的是它有详细的解释和示例,说明为什么regexp要做它所做的事情。
关于你的问题,我相信你想:
- 以-或_ 开头
- 后接1或2位数字
- 一个可选的G
- 以L结尾
[_] [0 - 9] {1,2} G ?L
以上应该是你需要的。你可以使用上面的网站来了解它的含义,你也可以粘贴示例文本来测试它是否真的适用于你。