亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

正則表達式使用特殊字符(破折號、撇號)分割名稱

正則表達式使用特殊字符(破折號、撇號)分割名稱

飲歌長嘯 2023-09-05 15:45:26
我有一個包含姓名的列,它們都是串聯的(也就是說,名字和姓氏之間沒有空格)。我正在嘗試拆分名字和姓氏,該網站上已經詢問過這個問題。然而在這里,有些名稱帶有破折號\-或撇號\'。Speed-WagonMario CruiserPetey SthesiaAnna De’wayneJohn我想確保它被我的正則表達式查詢捕獲:clean_names = re.split(r'([A-Z][a-z\']+\-[A-Z][a-z\']+|[A-Z][a-z\']+)', names)它適用于破折號,破折號僅出現在大寫字母之前,但不適用于撇號。有人對如何解決我的查詢有意見嗎?提前致謝
查看完整描述

1 回答

?
收到一只叮咚

TA貢獻1821條經驗 獲得超5個贊

您可以將正向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; }


查看完整回答
反對 回復 2023-09-05
  • 1 回答
  • 0 關注
  • 198 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號