嗨,我正在用python编写一个函数,使用正则表达式在文本字符串中搜索特殊字符。
一旦找到匹配项,程序应给出错误信息并退出。
这是我到目前为止所做的,能够搜索;,$,%',但无法在Windows中搜索并找到&,<,>之类的字符。
下面给出的当前代码在Windows中有效,但在Linux中不可用。但是我也想在Windows和Linux中使用此代码。
这是我的代码:
#tests for finding special characters
import sys, re
cmd = input('Enter your command : ')
def chk_cmds(cmd):
print('chk_cmds: lets look term at %s' % (cmd))
msg = bool(re.search(r'\;|\$|\%|`', cmd))
if msg is True:
print(msg)
print('Found a suspicious entry in the command : ' + cmd)
print('Exiting the program')
return -1
sys.exit
else:
print('Command seems clean ' +cmd)
return 0
# return -1
chk_cmds(cmd)
问:我还如何在Windows和Linux的字符串中搜索特殊字符,例如&,<,>。
我尝试为每个字符使用反斜杠转义字符
类似于bool(re.search(r'\;|\$|\%|`|\&|\<|\>', cmd))
,但re.search在Windows中找不到它们。 (而且当前下面的代码似乎在Linux中不起作用)
答案 0 :(得分:1)
如果您遍历输入字符串的每个字符,然后将其ASCII码与要检测的ASCII码列表进行比较。
import sys, re
cmd = input('Enter your command : ')
def chk_cmds(cmd):
print('chk_cmds: lets look term at %s' % (cmd))
# ASCII codes for the special characters you specified:
bad_chars = [36, 37, 38, 59, 60, 62, 63, 96]
msg = False
for letter in cmd:
for i in bad_chars:
if(ord(letter) == i):
msg = True
if msg is True:
print(msg)
print('Found a suspicious entry in the command : ' + cmd)
print('Exiting the program')
return -1
sys.exit
else:
print('Command seems clean ' +cmd)
return 0
# return -1
chk_cmds(cmd)
这在使用python3的Linux上对我有效
答案 1 :(得分:1)
我没有Windows计算机,因此无法在那里进行测试,但它似乎至少可以在Mac上运行。
我在正则表达式中使用了字符列表,而不是您的方法:
import sys
import re
def chk_cmds(cmd):
print('chk_cmds: lets look term at {}'.format(cmd))
regex = re.compile(r'[&`%;$<>]')
msg = bool(regex.search(cmd))
if msg is True:
print(msg)
print('Found a suspicious entry in the command : {}'.format(cmd))
print('Exiting the program')
return -1
else:
print('Command seems clean {}'.format(cmd))
return 0
mycmd = input('Enter your command : ')
if chk_cmds(mycmd) == -1:
sys.exit()
您的sys.exit()
命令也没有执行任何操作,因为它是在返回之后执行的,因此我已根据函数的返回代码将其移至if块。
虽然您使用的是Python 3.6或更高版本,但也应该开始使用.format
进行字符串格式化,尽管您应该开始使用f-strings