简介:汇总了医学数据处理中常用的有关字符串筛,修正,拆分,提取所用代码
R包:tidyverse
正则表达式语法
1.1 特殊字符及其反意
. 匹配任意字符(注意只在同一行中有效如需换行可以用[\s\S]
\d \D 匹配数字 匹配非数字
\s \S 匹配空白符
\w \W 匹配字母,数字,汉字,下划线
[a-zA-Z0-9] 匹配数字或字母
[a-zA-Z] 匹配字母
[\p{han}] 匹配汉字
1.2 元字符
| #或
^ $ #字符串开头结尾
()
[]
{} * + ?
[abc]:匹配方括号内的任意一个字符(a、b 或 c)。
[^abc]:匹配不在方括号内的任意字符。
[a-z]:匹配从 a 到 z 的任何小写字母。
[A-Z]:匹配从 A 到 Z 的任何大写字母。
[0-9]:匹配从 0 到 9 的任何数字。
{n}:匹配前面的字符恰好 n 次。
{n,}:匹配前面的字符至少 n 次。
{n,m}:匹配前面的字符至少 n 次,但不超过 m 次。
*:匹配前面的字符零次或多次。
+:匹配前面的字符一次或多次。
?:匹配前面的字符零次或一次(表示可选)。
.*? 懒惰匹配,匹配到下一个指定字符后就停止
字符串处理常用函数
#字符串拆分
x="x1,a2,b3"
str_split(x,",")
#字符串合并
x=c("x1","a2","b3")
str_c(x,1:3,sep="_")
#提取部分内容
x=c("x1","a2","b3")
str_sub(x,1,1)
#大小写转化
x=c("x1","A2","b3","a die")
str_to_upper(x) #所有字母大写
str_to_lower(x) #所有字母小写
str_to_title(x) #单词开头字母大写
#检测是否匹配返回逻辑值(可用正则表达式)
x=c("x1","a2","b3","a")
str_detect(x,"a")
#提取匹配的元素(可用正则表达式)
x=c("x1","a2","b3","a")
str_subset(x,"a")
#只提取匹配的内容(可用正则表达式)
x=c("x1","a2","b3","a")
str_extract(x,"a")
#替换匹配的字符串(可用正则表达式)
x=c("x1","a2","b3","a")
str_replace(x,"a","C")
利用正则表达式和字符处理函数实现精确的字符处理
#str_view()用于调试正则表达式,确认无误后可用上面的替换提取等函数
#提取数字
x = c("1.45m", "56.7kg", "78.568平方米")
str_extract(x,"\\d+.\\d+")
parse_number(x) #用此函数提取待小数点的小数更加方便
#提取百分数或数字
x=c("abc12%n","ckd14%ed","s10m")
str_extract(x,"\\d+%?")
#提取单位(字母或汉字)
x = c("1.45m", "56.7kg", "78.568平方米")
str_extract(x,"[\\p{han}]+|[a-zA-Z]+")
#零宽断言
x=c("123我做了一个modela_1哈","123我做了一个modelb_1哈")
str_extract(x,"(?<=123).*(?=\\p{han})")
#替换进阶
#字母或数字与汉字之间用空格隔开
x=c("华硕b450","处理器7500f","微星 迫击炮")
str_replace(x,"([a-zA-Z0-9])"," \\1")
#调换顺序
x=c("小明的math:99","小白的55:english")
str_replace(x,"(\\d+):([a-zA-Z]+)","\\2:\\1")
应用举例
1.变量重新赋值/包含检测
zz <- zz %>% mutate(fz2=case_when(str_detect(value,"Scr")~1,
str_detect(value,"eGFR")~2,
str_detect(value,"年龄")~3,
str_detect(value,"时间")~4,))
2.变量拆分
3.字符提取
4.字符修改