ruby正则表达式提取两个部分:数字,然后是后来的任何东西

时间:2011-08-25 06:49:02

标签: ruby regex

我的用户输入是一个字符串,我需要分成两部分,(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的相对新手,我不知道如何提取多个部分,以及如何将第二部分定义为第一部分之后的任何内容(这基本上意味着任何不匹配的东西之后)第一部分)

2 个答案:

答案 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,所以你必须自己实现这种模式。