簡體   English   中英

捕獲第一個單詞和最后一個單詞的首字母的正則表達式

[英]Regular expression that captures the first letter of the first word and last word

我是正則表達式的新手,我試圖弄清楚如何在數據框中生成一個新列以捕獲名稱的首字母縮寫和姓氏。

例子df

Name           NormName
john smith     j smith
s r peterson   s peterson
sandra oh      s oh

這是我到目前為止嘗試過的代碼,但似乎無法使其正常工作。 我不知道如何僅替換中間部分。

namereg = re.compile('(^[a-z])(.*)(\s[a-z]*$)')
names['NormName'] = names.Name.apply(lambda tmp: namereg.sub('',tmp))

我認為您甚至不需要使用正則表達式:

names['NormName'] = names.Name.apply(lambda tmp: tmp[0]+" "+tmp.rpartition(" ")[2])

這應該可以,請根據需要進行調整。

import re
name="john smith"
PATTERN=r'^(\w).*(\s+\w+)$'
MATCH=re.search(PATTERN, name)
print(MATCH.group(1)+MATCH.group(2)

您可以使用

names['NormName'] = names['Name'].str.replace(r'^([a-z]).*\s([a-z]+)$', r'\1 \2')

參見regex演示

圖案細節

  • ^ -字符串的開頭
  • ([az]) -組1(在替換模式中用\\1占位符表示):一個小寫ASCII字母
  • .*\\s最多0個字符,直到最后一個空格
  • ([az]+) -第2組(在替換模式中用\\2占位符表示):...處的1+小寫ASCII字母...
  • $ -字符串的結尾。

Python演示:

>>> names['NormName'] =  names['Name'].str.replace(r'^([a-z]).*\s([a-z]+)$', r'\1 \2')
>>> names
           Name    NormName
0    john smith     j smith
1  s r peterson  s peterson
2     sandra oh        s oh

嘗試使用re.sub。 這里的第一個字母^(\\ w),最后一個單詞(\\ b \\ w + \\ b $)。

df['NormName']=df.Name.apply(lambda x: re.sub(r'^(\w).*(\b\w+\b$)',r'\1 \2',x))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM