1 回答
![?](http://img1.sycdn.imooc.com/54586425000103f602200220-100-100.jpg)
TA贡献1821条经验 获得超4个赞
您可以将正向lookbehind(小写)与正向lookahead(大写)结合起来。两个匹配的环视在拆分时都会保留。
/ // BEGIN EXPRESSION
(?<=[a-z]) // POSITIVE LOOKBEHIND [a-z]
(?=[A-Z]) // POSITIVE LOOKAHEAD [A-Z]
/ // END EXPRESSION
Python 示例
#!/usr/bin/env python3
import re
def pair_to_person(pair):
person = {}
person['firstName'] = pair[1]
person['lastName'] = pair[0]
return person
def parse_name_column(column_text):
return map(pair_to_person,
map(lambda name: re.split(r'(?<=[a-z])(?=[A-Z])', name),
map(lambda x: x, column_text.strip().split('\n'))))
print_list = lambda list: print('\n'.join(map(str, list)))
if __name__ == '__main__':
column_text = '''
Speed-WagonMario
CruiserPetey
SthesiaAnna
De’wayneJohn
'''
names = parse_name_column(column_text)
print_list(names)
输出
{'firstName': 'Mario', 'lastName': 'Speed-Wagon'}
{'firstName': 'Petey', 'lastName': 'Cruiser'}
{'firstName': 'Anna', 'lastName': 'Sthesia'}
{'firstName': 'John', 'lastName': 'De’wayne'}
JS 示例
const data = `
Speed-WagonMario
CruiserPetey
SthesiaAnna
De’wayneJohn
`;
const names = data.trim().split('\n')
.map(name => name.trim().split(/(?<=[a-z])(?=[A-Z])/))
.map(pair => ({ firstName: pair[1], lastName: pair[0] }));
console.log(names);
.as-console-wrapper { top: 0; max-height: 100% !important; }
添加回答
举报