如何用正则表达式提取DataFrame列字符串的中间单个数字
提取字符串中间单个数字的正则表达式方案
针对你DataFrame中day_survey_prompt列的格式(如14.5.85),可以用以下几种正则表达式实现需求:
方法1:利用正向/反向预查(推荐)
使用带预查的正则,直接匹配中间的单个数字,不会捕获句点:
str_extract(day_survey_prompt, "(?<=\\.)\\d(?=\\.)")
(?<=\.):反向预查,确保目标数字的前一个字符是句点(但不捕获句点)\d:匹配单个数字(正好对应你需求中1-8的单个数字)(?=\.):正向预查,确保目标数字的后一个字符是句点(同样不捕获句点)
测试14.5.85时,会直接返回5,完全符合预期。
方法2:利用捕获组
通过捕获组锁定中间的数字,str_extract会自动提取第一个捕获组的内容:
str_extract(day_survey_prompt, "^\\d+\\.(\\d)\\.\\d+$")
^\d+\.:匹配开头的数字部分加句点(如14.)(\d):捕获中间的单个数字(这部分就是我们要的结果)\.\d+$:匹配结尾的句点加数字部分(如.85)
你之前尝试的问题说明
[^.]*$:这个正则是匹配最后一个句点之后的所有非句点字符,所以会拿到末尾的85[^.]*[.$]:这个正则是匹配从开头到第一个句点的内容(包括句点),所以会拿到14.
内容的提问来源于stack exchange,提问作者maryisbiking
相关产品推荐
相关产品推荐

