2017-11-04 100 views
1

我有一个脚本搜索,比如说,一个字+“(”我会用:Python3:输入命令行正则表达式

pattern = re.compile("anyword\(") 

但我希望让用户从进入模式字符串命令行 (视窗10)。

argp = argparse.ArgumentParser() 
argp.add_argument("-p", metavar="pattern", type=str, 
       , help="regex pattern") 
args= argp.parse_args() 
pattern = re.compile(args.p) 

但是未办理anyword\(正常。反正有做到这一点?

我试过以下,但没有得到我吨至re.compile(anyword\():

pattern = re.compile(bytes(args.p, "utf-8").decode('unicode_escape')) 
pattern = re.compile(str.encode(args.p).decode('unicode_escape')) 
pattern = re.compile(eval(args.p)) 
+0

你能分享输入字符串吗? –

+2

用户在命令行上输入时可能需要转义反斜杠。 – Barmar

回答

0

我估计,这是是一个相当不错的办法(逃避命令行等),但这个工程:

import argparse, re 

ap = argparse.ArgumentParser() 
ap.add_argument("-p", "--pattern", required = True, help= "regex pattern") 
args = vars(ap.parse_args()) 

string = "here is someword hidden" 

if re.search(args["pattern"], string): 
    print("Found") 

当通过python task.py -p "someword.+"调用此产生

Found 
1

我已经得到了从响应的两个好方法一google page

Dhruv直升机Kanojia(Xonshiz)写道,使用regexEntry.py这样的:

pattern = re.compile("{0}".format(user_input))

叶夫根尼·洛博夫简单地使用:

pattern = re.compile("anyword[(]")

两个工作,但Dhruv直升机的做法没有按” t要求用户添加[]。