Python3:从命令行

时间:2017-11-04 06:06:00

标签: python regex command-line command-line-arguments

我有一个脚本搜索,比如一个单词+“(”。我会用:

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

但我想让用户从命令中输入模式字符串 line(Windows 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) )

2 个答案:

答案 0 :(得分:1)

我从google page的回复中得到了两个好的方法:

Dhruv Kanojia(Xonshiz)写了一个regexEntry.py使用了这个:

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

Evgeniy Lobov 只使用:

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

两种方法都有效,但Dhruv的方法并不要求用户添加[]。

答案 1 :(得分: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