与标题中一样,我需要R中的一个正则表达式,该表达式将匹配十进制数字并以逗号作为分隔符,以便使用stringr::str_extract
从字符串中提取它们。正则表达式应捕获以下情况:
0,1
10
1000,29
3,23313
我尝试了类似[0-9]+,[0-9]+
的操作,但没有成功
答案 0 :(得分:3)
您可以使用
regmatches(x, gregexpr("\\d+(?:,\\d+)?", x))
请参阅此R demo。
要对stringr
进行相同操作,请使用stringr::str_extract_all
,它使“提取与模式匹配的所有字符串片段” :
library(stringr)
str_extract_all(x, "\\d+(?:,\\d+)?")
请注意,\d
函数中的stringr
可能与所有Unicode数字匹配,例如
0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯୦୧୨୩୪୫୬୭୮୯௦௧௨௩௪௫௬௭௮௯౦౧౨౩౪౫౬౭౮౯೦೧೨೩೪೫೬೭೮೯൦൧൨൩൪൫൬൭൮൯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩၀၁၂၃၄၅၆၇၈၉႐႑႒႓႔႕႖႗႘႙០១២៣៤៥៦៧៨៩᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙0123456789
因此,可能您会更安全使用
str_extract_all(x, "[0-9]+(?:,[0-9]+)?")
答案 1 :(得分:0)
您可以使用以下正则表达式来匹配一个或多个用逗号分隔的十进制数字:
\d+(?:,\d+)*
答案 2 :(得分:0)
如果您关心的只是提取整数(无小数),并且不管分隔符是逗号还是其他任何东西,都可以使用:
(\d+)
答案 3 :(得分:0)
尝试这个,它匹配数字,可选地后面跟一个逗号和一个或多个数字:
\b\d+(,d+)?\b
答案 4 :(得分:0)
匹配长度为1或更大的数字,后跟0或1 ,
,后跟0或更多数字
"\\d+,{0,1}\\d*" # double \ needed in R