如何处理空函数参数?

时间:2017-09-15 05:43:02

标签: regex python-2.7 file

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'只是来自大文件的一行。

1 个答案:

答案 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

查看最后一个示例:它将匹配示例字符串,即使您的参数具有默认值。