这有效:
$new_text = preg_replace('/([b-df-hj-np-tv-z])([b-df-hj-np-tv-z])/i', '$1-$2', $text);
var_dump($new_text);
// string(23) "ab-ce d-fia jic-d f-bii"
如何将其转化为字典理解?我已经尝试过了,但是无法正常工作,我应该在末尾加上def delete_empty_keys(d):
new_d = {}
for key,value in d.items():
if key != '' and not isinstance(value, dict):
new_d[key] = value
elif key != '' and isinstance(value, dict):
new_d[key] = delete_empty_keys(value)
else:
pass
return new_d
。
else pass
答案 0 :(得分:3)
您的循环
for key,value in d.items():
if key != '' and not isinstance(value, dict):
new_d[key] = value
elif key != '' and isinstance(value, dict):
new_d[key] = delete_empty_keys(value)
else:
pass
真的只是在测试是否应该跳过键,如果不是,请 来测试如何处理该值。如果您将密钥测试拉到单独的if
语句中,则可以将其重写为
for key, value in d.items():
if key != '':
if not isinstance(value, dict):
new_d[key] = value
else:
new_d[key] = delete_empty_keys(value)
因此if key != '':
测试实际上是过滤项,并选择将其作为新词典的一部分。理解中的过滤是通过循环中的其他if
组件完成的:
<item> for <target> in <iterable> if <test> # optional: more for loops and if tests
if <test>
部分过滤可迭代项,从而限制使用哪些项。在字典理解中使用相同的语言。
这留下了内部if...else
测试,可以用条件表达式表示(在两个选项之间进行选择):
# iteration, for <target> in <iterable>
for key, value in d.items():
# filter, if <test>
if key != '':
# <item>, here a <key> and <value> expression for the dict comprehension
new_d[key] = value if not isinstance(value, dict) else delete_empty_keys(value)
现在您可以将其转换为字典理解形式:
{
key: value if not isinstance(value, dict) else delete_empty_keys(value)
for key, value in d.items()
if key != ''
}
或者,在您的函数中:
def delete_empty_keys(d):
return {key: value if not isinstance(value, dict) else delete_empty_keys(value)
for key, value in d.items() if key != ''}
答案 1 :(得分:1)
好吧,如果您真的想要这样做:
def delete_empty_keys(d):
return {k: delete_empty_keys(v) if isinstance(v, dict)
else v
for k, v in d.items() if k != ''}
示例:
d = {'': 'delete_me',
'a': {'': {'delete': 'me',
'me': 'too'},
'dont': 'delete_me',
'keep': 'me'},
'b': {'': 'bye'},
'c': 'not_nested'}
delete_empty_keys(d)
输出:
{'a': {'dont': 'delete_me', 'keep': 'me'}, 'b': {}, 'c': 'not_nested'}
您不会pass
理解dict
,因为pass
不会返回任何内容。理解中的一切都应该返回某些东西。
此外,如注释中所述:None != ''
。