代码之家  ›  专栏  ›  技术社区  ›  jakes

以逗号作为分隔符匹配十进制数的regex表达式

  •  2
  • jakes  · 技术社区  · 6 年前

    与标题一样,我需要r中的regex表达式,该表达式将十进制数与逗号作为分隔符进行匹配,以便从字符串中提取 stringr::str_extract . regex应捕获以下情况:

    0,1
    10
    1000,29
    3,23313
    

    我试过这样的东西 [0-9]+,[0-9]+ 但它不起作用

    5 回复  |  直到 6 年前
        1
  •  3
  •   Wiktor Stribiżew    6 年前

    您可以使用

    regmatches(x, gregexpr("\\d+(?:,\\d+)?", x))
    

    看到这个 R demo .

    用同样的方法 stringr 使用 stringr::str_extract_all 那个 “提取与模式匹配的字符串的所有片段” :

    library(stringr)
    str_extract_all(x, "\\d+(?:,\\d+)?") 
    

    注意 \d 在里面 斯特林格尔 函数可以匹配所有Unicode数字,如

    0123456789٠١٢٣٤٥٦٧٨٩۰۱۲۳۴۵۶۷۸۹߀߁߂߃߄߅߆߇߈߉०१२३४५६७८९০১২৩৪৫৬৭৮৯੦੧੨੩੪੫੬੭੮੯૦૧૨૩૪૫૬૭૮૯୦୧୨୩୪୫୬୭୮୯௦௧௨௩௪௫௬௭௮௯౦౧౨౩౪౫౬౭౮౯೦೧೨೩೪೫೬೭೮೯൦൧൨൩൪൫൬൭൮൯๐๑๒๓๔๕๖๗๘๙໐໑໒໓໔໕໖໗໘໙༠༡༢༣༤༥༦༧༨༩၀၁၂၃၄၅၆၇၈၉႐႑႒႓႔႕႖႗႘႙០១២៣៤៥៦៧៨៩᠐᠑᠒᠓᠔᠕᠖᠗᠘᠙᥆᥇᥈᥉᥊᥋᥌᥍᥎᥏᧐᧑᧒᧓᧔᧕᧖᧗᧘᧙᭐᭑᭒᭓᭔᭕᭖᭗᭘᭙᮰᮱᮲᮳᮴᮵᮶᮷᮸᮹᱀᱁᱂᱃᱄᱅᱆᱇᱈᱉᱐᱑᱒᱓᱔᱕᱖᱗᱘᱙꘠꘡꘢꘣꘤꘥꘦꘧꘨꘩꣐꣑꣒꣓꣔꣕꣖꣗꣘꣙꤀꤁꤂꤃꤄꤅꤆꤇꤈꤉꩐꩑꩒꩓꩔꩕꩖꩗꩘꩙0123456789

    所以,也许你会更安全地使用

    str_extract_all(x, "[0-9]+(?:,[0-9]+)?")
    
        2
  •  0
  •   blhsing    6 年前

    可以使用以下regex来匹配用逗号分隔的一个或多个十进制数:

    \d+(?:,\d+)*
    
        3
  •  0
  •   Kon    6 年前

    如果您只关心提取整数(无分数),而不关心分隔符是否是逗号或其他任何内容,则可以使用:

    (\d+)
        4
  •  0
  •   Poul Bak    6 年前

    试试这个,它匹配数字,可以选择后跟一个逗号和一个或多个数字:

    \b\d+(,d+)?\b
    
        5
  •  0
  •   s_baldur    6 年前

    多匹配一个长度为1的数字,后面跟0或1 , 后面跟着0个或更多的数字

    "\\d+,{0,1}\\d*" # double \ needed in R