我的用户输入是一个字符串,我需要分成两部分,(1)部分电话号码[任何数字序列 - 。空间,parens所以我假设它由/[\d\. \-\(\)]/
]和(2)表示后面的任何内容(如果有的话)。
例如
"88 comment" -> "88" & "comment"
"415-915 second part" --> "415-915" & "second part"
"(415) 915 part 2" --> "(415) 915" & "part 2"
"a note" --> "" & "a note"
"part 2" --> "" & "part 2"
作为ruby和regex的相对新手,我不知道如何提取多个部分,以及如何将第二部分定义为第一部分之后的任何内容(这基本上意味着任何不匹配的东西之后)第一部分)
答案 0 :(得分:5)
这是正则表达式(我将在下面解释):
/^([-\d. ()]*)(.*)$/
^
表示“从字符串的开头开始”
在([-\d. ()]*)
中,*
表示“匹配任意数量的前一个字符,并且parens意味着创建一个匹配组(这是您以后获取该值的方式)。所以这是第一个序列。
在(.*)
中,.
表示“匹配任何单个字符”,因此.*
表示“匹配任意数量的任何字符”,它基本上是一个全能。 parens创建了第二个匹配组。
$
表示“在字符串末尾完成”
所以在红宝石中:
string =~ /^([-\d. ()]*)(.*)$/
puts $1.strip # is the phone number (with excess whitespace removed)
puts $2.strip # is the rest (with excess whitespace removed)
答案 1 :(得分:1)
尝试/([\d.\s()/-]*)(.+)/
第一组将捕获数字,第二组将捕获“其他”部分。我不知道ruby,所以你必须自己实现这种模式。