我有一个正则表达式:
override func viewDidLoad() {
// myCustomView is an IBOutlet in the view controller
myCustomView.question = question
}
有没有办法使用valid_name = re.compile("^[_a-zA-Z][_a-zA-Z0-9]*$")
构建新的正则表达式?类似的东西:
valid_name
我不想使用字符串连接,而是使用新编译的正则表达式。
答案 0 :(得分:0)
您无法重用已编译的正则表达式,但您可以比纯字符串连接做得更好。
Python的regex
模块supports Perl的(?(DEFINE)...)
语法。
因此,您可以使用以后要重用的公共表达式定义一个字符串,将其连接到您的模式,并使用递归语法调用子表达式:(?&name)
。
以下是一个例子:
import regex
common = r"""(?(DEFINE)
(?<VALID_NAME>\b[_a-zA-Z][_a-zA-Z0-9]*)
(?<SOMETHING_ELSE>[-+/*])
)"""
pattern = regex.compile(common + r"((?&VALID_NAME)\.)*(?&VALID_NAME)")
result = pattern.search("42hello! foo.bar.baz")
print(result[0])
输出:
foo.bar.baz