使用正则表达式提取字符串

时间:2014-12-25 17:33:07

标签: ruby regex

我需要提取一个字符串' MT / 23232'我写了下面的代码,但是 它不起作用,任何人都可以帮助我吗?

'Policy created with MT/1212'
'Policy created with MT/121212'
'Policy created with MT/21212121212'

我写了这段代码

味精=" MT / 33235"  id = msg.scan(/ MT / \ d + / \ d + /)[0]

但它不适合我,任何人都可以帮我提取这个字符串吗?

2 个答案:

答案 0 :(得分:1)

your_string.scan(/\sMT.*$/).last.strip

如果您所需的子字符串可以在字符串中的任何位置,那么:

your_string.scan(/\bMT\/\d+\b/).last.strip # "\b" is for word boundaries

或者你可以用这种方式指定可接受的数字:

your_string.scan(/\bMT\/[0-9]+\b/).last.strip

最后,如果字符串格式将按照您的指定保留,则:

your_string.split.last

答案 1 :(得分:1)

您需要转义正则表达式中MT旁边的正斜杠,并且您不需要在\d+之后使用正斜杠。而且我建议你添加一个lookbehind,以便你得到一个干净的结果。 (?<=\s)肯定的后视,断言匹配必须以空格字符开头。

msg.scan(/(?<=\s)MT\/\d+/)[0]

如果你不关心前面的字符,那么下面的正则表达式就可以了。

msg.scan(/MT\/\d+/)[0]

示例:

> msg = 'Policy created with MT/21212121212'
=> "Policy created with MT/21212121212"
> msg.scan(/(?<=\s)MT\/\d+/)[0]
=> "MT/21212121212"
> msg.match(/(?<=\s)MT\/\d+/)[0]
=> "MT/21212121212"