我有一个字符列表
Page not found (404)
Request Method: GET
Request URL: http://localhost:8000/balance/2018/04/02
Using the URLconf defined in spendings_calculator.urls, Django tried these URL patterns, in this order:
admin/
balance/ [name='index']
balance/ <int:year>/<int:month:>/<int:day>/ [name='show_day']
balance/ <int:year>/<int:month>/ [name='show_month']
balance/ <int:year>/ [name='show_year']
The current path, balance/2018/04/02, didn't match any of these.
我有一些话。
a = ["s", "a"]
我知道列表中的字符只能出现一次或按线性顺序出现(或者最小的出现在较大的字符集中)。
我想通过将元素放在中间,其余部分放在左边或右边来分割我的单词(如果没有任何内容则放一个“=”)
所以b = "asp"
c= "lat"
d = "kasst"
如果包含
的更大字符集b = ["*", "as", "p"]
我知道这些组合最多可以是4个长度。
所以我根据长度划分了可能的组合:
d = ["k", "ass", "t"]
对于每个c,从更大的开始 为简单起见,假设我在这种情况下以c3开头而不是长度为4.
我必须用大量数据来做这件事。
有没有办法简化代码?
答案 0 :(得分:1)
我会做一个正则表达式来简化匹配。
import re
splitters = ''.join(a)
pattern = re.compile("([^%s]*)([%s]+)([^%s]*)" % (splitters, splitters, splitters))
words = [v if v else '=' for v in pattern.match(s).groups() ]
这不允许第一个或最后一个组中的字符,因此并非所有字符串都能正确匹配(并抛出异常)。如果你愿意,你可以允许它们。您可以随意修改正则表达式,以更好地匹配您希望它执行的操作。
此外,您只需要运行一次re.compile
,而不是每次尝试匹配的字符串。
答案 1 :(得分:1)
使用正则表达式?
import re
a = ["s", "a"]
text = "kasst"
pattern = re.compile("[" + "".join(a) + "]{1,4}")
match = pattern.search(text)
parts = [text[:match.start()], text[match.start():match.end()], text[match.end():]]
parts = [part if part else "*" for part in parts]
但请注意,如果
中的元素不匹配,则不会处理此情况答案 2 :(得分:1)
您可以使用正则表达式执行类似的操作:
>>> import re
>>> p = re.compile(r'([sa]{1,4})')
p
匹配字符's'或'a'重复1到4次。
要以此模式拆分给定字符串,请使用p.split
。在模式中使用捕获括号会导致模式本身包含在结果中。
>>> p.split('asp')
['', 'as', 'p']
>>> p.split('lat')
['l', 'a', 't']
>>> p.split('kasst')
['k', 'ass', 't']