regex表达式以逗号分隔十进制数

时间:2018-09-25 15:34:49

标签: r regex

与标题中一样,我需要R中的一个正则表达式,该表达式将匹配十进制数字并以逗号作为分隔符,以便使用stringr::str_extract从字符串中提取它们。正则表达式应捕获以下情况:

0,1
10
1000,29
3,23313

我尝试了类似[0-9]+,[0-9]+的操作,但没有成功

5 个答案:

答案 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