如何处理空函数参数?

regex python-2.7 file

28 观看

1回复

85 作者的声誉

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

作者: Diesel Kumar 的来源 发布者: 2017 年 9 月 15 日

回应 1


0

2572 作者的声誉

理由是,只要参数为空,则将其替换为.*。尝试这个:

$ 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

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

作者: Marc Lambrichs 发布者: 2017 年 9 月 15 日
32x32