我有以下字符串
Policy 023203232/02/05 saved successfully
我需要从上面的字符串中提取023203232/02/05
并编写以下代码
puts a[/\d+\/\d+\/\d+/]
它工作正常。但是,如果数字随着斜杠增加,023203232/02/05/06
我必须再包含一个\d+
,但我不知道有多少斜杠和数字会以这种方式重复,所以任何人都可以建议我写一下一些通用解决方案
如果字符串是
Policy 023203232/02/05 saved successfully
然后
023203232/02/05
如果字符串是
Policy 023203232/02/05/06 saved successfully
然后
023203232/02/05/06
如果字符串是
Policy 023203232/02/05/06/08 saved successfully
然后
023203232/02/05/06/08
如何编写这样的通用正则表达式?
答案 0 :(得分:2)
假设连续的数字和斜线(即中间没有空格),这应该有效:
{{1}}
答案 1 :(得分:1)
这个查找一系列数字或斜杠:
str = "Policy 023203232/02/05/07/3434343/56 saved successfully 09/56/3"
p str.match(/[0-9\/]+/)[0] # => "023203232/02/05/07/3434343/56"
答案 2 :(得分:1)
这个正则表达式应该是你想要的:
/(\d+\/?)+/
这意味着:
/
它应该比其他答案更强大:
"Policy 023203232/02/05/06/08 saved successfully"[/(\d+\/?)+/]
# => "023203232/02/05/06/08"
"Policy 023203232/02/05/07/3434343/56 saved successfully 09/56/32"[/(\d+\/?)+/]
# => "023203232/02/05/07/3434343/56"
"Policy // // 023203232/02/05/07/3434343/56 saved successfully 09/56/32"[/(\d+\/?)+/]
# => "023203232/02/05/07/3434343/56"
如果您想确保该号码在“政策”之后,但又不想让'Policy '
在您的匹配中,您可以使用positive look-behind:
/(?<=Policy )(\d+\/?)+/
这里有效:
"2017/03/31 Policy 023203232/02/05/07/3434343/56 saved successfully"[/(?<=Policy )(\d+\/?)+/]
# => "023203232/02/05/07/3434343/56"