检查字符串是否符合从字符串中提取文本的条件 - 正则表达式



我是正则表达式的新手,我不仅有一个字符串来提取所需的文本,而且,我还需要允许其他类型的字符串与正则表达式不匹配迭代我的其他函数。

这是我想要实现的目标:

我正在从csv文件中运行设备名称,如果它只有DeviceName而没有下面提到的字符串,它应该简单地将其返回给函数并让其他函数处理它。 我想使用正则表达式的字符串将像

"设备名称"上的卡ADFGTR43567",我只想从中提取设备名称

ADFGTR43567是一个序列号,里面有 11 个字母,由没有明确位置的数字和字母组成。

在这里,设备名称可以是任何东西,例如EX:它可以是ARIEFRETO002或 ARIERDTOT5968.na.abc.com,甚至只是一个普通的MAC地址,如1234.abcd.5678 因此,即使字符串具有类似"设备名称上的卡序列号"之类的模式。

我希望它提取设备名称并针对我的代码中的其他函数运行。如果我的csv中的设备名称没有这种模式,我仍然希望它提取它们并将其提供给其他函数。

我已经用我的函数编写了一段代码,但我不能在这里使用正则表达式。这是我到目前为止尝试过的,只粘贴必要的信息。

def validnames():
idx = col[0].find('-')
if idx > -1:
user = col[0][idx + 1:idx + 4]
if user.upper() in d:
return col[0].split('.')[0]
else:
return 'Not Found'
else:
return 'Not Found'

def pingable():
response = subprocess.Popen(['ping.exe', validnames()], stdout=subprocess.PIPE).communicate()[0]
response = response.decode()
if 'bytes=32' in response:
status = 'Up'
return status
else:
status = 'Down'
return status
with open("Book2.csv", 'r') as lookuplist:
for col in csv.reader(lookuplist):
if validnames() == 'Not Found' : continue
if pingable() == 'Down' : continue
if validnames().lower() not in data:
with open('Test.csv', 'a', newline='') as csvoutput:
output = csv.writer(csvoutput)
output.writerows([[validnames()]+[pingable()]])
print("Device: %s" % validnames(), pingable())

def validnames():是一个函数,用于检查该设备是否符合 ping 操作的条件(基于条件(。我想把正则表达式放在那个函数中,我完全迷失在那里!也许是另一个功能,但不太了解如何使用正则表达式。

更新:这就是我根据公认的答案集成两个功能的方式。

def regexfilter():
try:
rx = r'bons+(S+)'
m = re.search(rx, col[0])
if m:
return m.group(1)
else:
return col[0]
except:
return col[0]

def validnames():
idx = regexfilter().find('-')
if idx > -1:
user = regexfilter()[idx + 1:idx + 4]
if user.upper() in d:
return regexfilter().split('.')[0]
else:
return 'Not Found'
else:
return 'Not Found'

由于您要匹配on介词后面的双引号内的任何文本,因此您可以使用以下正则表达式:

bons+(S+)

请参阅正则表达式演示。

  • b- 单词边界
  • on-on
  • s+- 1+ 空格
  • (S+)- 捕获组 1:一个或多个非空格字符。

参见 Python 演示:

import re
rx = r'bons+(S+)'
s = "Card ADFGTR43567 on DeviceName"
m = re.search(rx, s)
if m:
print(m.group(1)) # => DeviceName

最新更新