Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
regex solution in Clear category for YAML. List and Comments by sawako.oono
import re
def yaml(a):
res=re.findall(r'- ([^"#]+?)( ?#.*)?(\n|$)|- "(.+?)"(\n|$)|(-\n)',a)
res2=re.findall(r'([^:(\n)]+?) ?: ?([^:]*?) ?(\n|$)',a)
if res!=[]:
ans=[]
for r in res:
if r[0]!="":
item=r[0]
elif r[3]!="":
item=r[3]
else:
item=None
try:
item=int(item)
except ValueError:
pass
except TypeError:
pass
ans.append(item)
else:
ans={}
for r in res2:
key=r[0]
value=r[1]
if not value : value=None
elif value=="null": value=None
elif value[0] in '"\'':
value=value[1:-1].encode('utf-8').decode('unicode_escape')
elif value.lower()=="false":
value=False
elif value.lower()=="true":
value=True
try:
value=int(value)
except ValueError:
pass
except TypeError:
pass
ans[key]=value
return ans
if __name__ == '__main__':
print("Example:")
print(yaml('- write some\n- "Alex Chii"\n- 89'))
# These "asserts" are used for self-checking and not for an auto-testing
assert yaml('- write some\n- "Alex Chii"\n- 89') == ['write some', 'Alex Chii', 89]
assert yaml('# comment\n'
'- write some # after\n'
'# one mor\n'
'- "Alex Chii #sir "\n'
'- 89 #bl') == ['write some', 'Alex Chii #sir ', 89]
assert yaml('- 1\n- 2\n- 3\n\n- 4\n\n\n\n- 5') == [1, 2, 3, 4, 5]
assert yaml('-\n-\n-\n- 7') == [None, None, None, 7]
print("Coding complete? Click 'Check' to earn cool rewards!")
July 17, 2021