[英]Regular expression where first letter in a word is uppercase, and word is surrounded by _
[英]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.