匹配字符后跟恰好 1 位数字
Matching character followed by exactly 1 digit
我需要对齐一些临床试验 ID 的格式,将两个数据库合并。例如,在数据库 A 中,患者 123 就诊 1 存储为“123v01”,而在数据库 B 中仅存储为“123v1”
我可以通过 grep 匹配包含 'v0' 的那些匹配 A 到 B 并将尾随零去掉到 'v',但为了学术兴趣和扩展 R
/ regex
技能,我想通过仅匹配包含 'v' 后跟 1 个数字的那些来反向匹配 B 到 A,这样我就可以分别用前导零填充该数字。
对于代表:
string <- c("123v1", "123v01", "123v001")
我可以匹配那些在 'v' 之后有 >= 2 位的数字,然后是逆子集
> idx <- grepl("v(\d{2})", string)
> string[!idx]
[1] "123v1"
但必须有一种方法可以匹配 'v' 后跟一个数字吗?我试过环顾四周
# Negative look ahead "v not followed by 2+ digits"
grepl("v(?!\d{2})", string)
# Positive look behind "single digit following v"
grepl("(?<=v)\d{1})", string)
但是 return 和 'invalid regex' 错误
有什么建议吗?
您需要在 grepl
函数上设置 perl=TRUE
标志。
例如
grepl("v(?!\d{2})", string, perl=TRUE)
[1] TRUE FALSE FALSE
有关详细信息,请参阅 。
您可以使用
grepl("v\d(?!\d)", string, perl=TRUE)
v\d(?!\d)
模式匹配 v
, 1 位数字,然后确保当前位置右侧没有数字(即在 v
+ 1 位数字之后) .
参见regex demo。
请注意,您需要使用 perl=TRUE
参数启用 PCRE 正则表达式风格。
我需要对齐一些临床试验 ID 的格式,将两个数据库合并。例如,在数据库 A 中,患者 123 就诊 1 存储为“123v01”,而在数据库 B 中仅存储为“123v1”
我可以通过 grep 匹配包含 'v0' 的那些匹配 A 到 B 并将尾随零去掉到 'v',但为了学术兴趣和扩展 R
/ regex
技能,我想通过仅匹配包含 'v' 后跟 1 个数字的那些来反向匹配 B 到 A,这样我就可以分别用前导零填充该数字。
对于代表:
string <- c("123v1", "123v01", "123v001")
我可以匹配那些在 'v' 之后有 >= 2 位的数字,然后是逆子集
> idx <- grepl("v(\d{2})", string)
> string[!idx]
[1] "123v1"
但必须有一种方法可以匹配 'v' 后跟一个数字吗?我试过环顾四周
# Negative look ahead "v not followed by 2+ digits"
grepl("v(?!\d{2})", string)
# Positive look behind "single digit following v"
grepl("(?<=v)\d{1})", string)
但是 return 和 'invalid regex' 错误
有什么建议吗?
您需要在 grepl
函数上设置 perl=TRUE
标志。
例如
grepl("v(?!\d{2})", string, perl=TRUE)
[1] TRUE FALSE FALSE
有关详细信息,请参阅
您可以使用
grepl("v\d(?!\d)", string, perl=TRUE)
v\d(?!\d)
模式匹配 v
, 1 位数字,然后确保当前位置右侧没有数字(即在 v
+ 1 位数字之后) .
参见regex demo。
请注意,您需要使用 perl=TRUE
参数启用 PCRE 正则表达式风格。