在R下,我试图将字符串中的字母和数字分开,以便在数字小于10(一位数)时添加0。
范例:
my_strings=c("GIR1", "GIR20", "GIR3ABC")
最后,我希望我的字符串=“GIR01”,“GIR 20”,“GIR03ABC”
所以我试着:
result=gsub("([A-Z]*)([1-9]{1})([A-Z]*)", "\\1Z\\2\\3",my_strings)
但我有两个问题
第一个:它不选择只有一个数字的字符串(它选择所有),即使我指定了{1}
,第二个问题是,我想要一个0
,而不是我在替换字符串中写的Z,但是,它变成了\\10
。有谁知道如何区分1和0?
谢谢你
4条答案
按热度按时间0vvn1miw1#
gsubfn
类似于gsub
,不同之处在于替换字符串可以是一个替换函数,该函数输入匹配,用该函数的输出替换它。这个函数可以用普通的方法来指定,也可以用我们这里使用的公式表示法来指定。因此,这个一行程序可以使用简单的正则表达式。这也适用
注意事项
问题的输入
8tntrjer2#
我们可以使用
gregexpr
来识别数字,使用regmatches
来提取并重新分配回字符串。nwlqm0z13#
我们可以首先提取字符串中的整数,用零填充它,然后用零填充的整数替换原始整数。
创建于2023-09-06附带reprex v2.0.2
tyu7yeag4#
您可以使用
参见regex demo和R demo online:
(?<!\d)([1-9])(?!\d)
正则表达式匹配(?<!\d)
-前面没有数字的位置([1-9])
-第1组(\1
):从1
到9
的数字(?!\d)
-一个不紧跟数字的位置。注意
perl=TRUE
的使用,因为正则表达式包含本机基础R TRE正则表达式引擎不支持的查找。