如何使用Python使用正则表达式在字符串中搜索/查找特殊字符,例如&,<或>

时间:2019-11-22 14:25:18

标签: python regex

嗨,我正在用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中不起作用)

2 个答案:

答案 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