我需要提取一个字符串' 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]
但它不适合我,任何人都可以帮我提取这个字符串吗?
答案 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"