我有一个脚本搜索,比如一个单词+“(”。我会用:
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) )
答案 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