Python regex,其中所需匹配可以是一个或两个整数



我有一些文件名的信息,我需要提取,信息是字符串中的一个或两个数字。我有代码做一个数字或两个数字,但我不能让它的工作来处理两者。我看过这个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. 开头
  3. 后接1或2位数字
  4. 一个可选的G
  5. 以L结尾

[_] [0 - 9] {1,2} G ?L

以上应该是你需要的。你可以使用上面的网站来了解它的含义,你也可以粘贴示例文本来测试它是否真的适用于你。

相关内容

  • 没有找到相关文章

最新更新