import re
def func1(valA="", valB="", valC=""):
data = "Stackoverflow Questions Answers"
if re.match('('+valA+')\s+('+valB+')\s+('+valC+')',data):
print "TRUE"
func1(valA="Stackoverflow", valB="Questions", valC="Answers") # This works fine
func1(valA="Stackoverflow", valB="", valC="") # This will not work, since reg-ex doesn't match
func1(valA="Stackoverflow", valB="", valC="Answers") # This will not work, since reg-ex doesn't match
在第二和第三个实例中,如何管理那些空字符串?
在函数内,如果它是空的,则分配相应的变量valB=".*"
。这可行吗?因为,这也必须在大文件中应用更多的参数。 'data'
只是来自大文件的一行。
答案 0 :(得分:0)
理由是每当一个参数为空时,用.*
替换它。试试这个:
$ cat test.py
import re
def func1(valA="", valB="", valC=""):
pattern = ("(" +
(valA or ".*") +
")\\s+(" +
(valB or ".*") +
")\\s+(" +
(valC or ".*") + ")")
print pattern
data = "Stackoverflow Questions Answers"
if re.match(pattern, data):
print "TRUE"
func1(valA="Stackoverflow", valB="Questions", valC="Answers") # This works fine
func1(valA="Stackoverflow", valB="", valC="") # This will not work, since reg-ex doesn't match
func1(valA="Stackoverflow", valB="", valC="Answers")
func1(valA="", valB="", valC="")
给你:
$ python test.py
(Stackoverflow)\s+(Questions)\s+(Answers)
TRUE
(Stackoverflow)\s+(.*)\s+(.*)
TRUE
(Stackoverflow)\s+(.*)\s+(Answers)
TRUE
(.*)\s+(.*)\s+(.*)
TRUE
查看最后一个示例:它将匹配示例字符串,即使您的参数具有默认值。