如何使pythonic?re.search()如果结果是无
def money_from_string(s):
gold = re.search("([0-9]+)g", s)
silver = re.search("([0-9]+)s", s)
copper = re.search("([0-9]+)c", s)
s = re.sub("[0-9]+g", "", s)
s = re.sub("[0-9]+s", "", s)
s = re.sub("[0-9]+c", "", s)
assert (len(s.strip()) == 0) # should be 0
return (gold.group() or 0) * 10000 + (silver.group() or 0) * 100 + (copper.group() or 0)
这不起作用,因为如果gold
为None
,gold.group()
将抛出一个错误。
输入例子&预期成果:
s = "15g17s5c" -> 150000 + 1700 + 5 -> 151705
s = "15g5s" -> 150000 + 500 -> 150500
s = "15g" -> 150000 -> 150000
s = "17s5c" -> 1700 + 5 -> 1705
s = "5c" -> 5 -> 5
请注意,我在输入相应的检查,以确保它实际上是正确的格式。 IE浏览器。它匹配:
MONEY_PATTERNS = [
"([0-9]+g[ ]*[0-9]+s[ ]*[0-9]+c)", # g/s/c
"([0-9]+g[ ]*[0-9]+s)", # g/s
"([0-9]+g[ ]*[0-9]+c)", # g/c
"([0-9]+s[ ]*[0-9]+c)", # s/c
"([0-9]+g)", # g
"([0-9]+s)", # s
"([0-9]+c)", # c
]
你想比检查它是否'None'并返回不同的东西以外的东西? – khelwood
's'看起来像什么?我可以从你的代码猜测,但我不应该 – brianpck
我担心它pythonic之前是正确的。 –