我有一个字符串:
str = word1.woa.1398 word2.woa.1398 word3.woa.1398 word4.woa.1398 word5.woa.1398
我想提取" 1398"对于word3。我需要路径的价值只是" 1398"。当我使用时:
path = str[/(?:word3.woa.*)[0-9]+/]
我明白了:
"word3.woa.1398 word4.woa.1398 word5.woa.1398"
有人能为我提供正确的正则表达式吗?
答案 0 :(得分:0)
> s = "word1.woa.1398 word2.woa.1398 word3.woa.1398 word4.woa.1398 word5.woa.1398"
> s.match(/word3.woa.(\d+)/).captures[0]
=> "1398"
答案 1 :(得分:0)
您可以使用当前符号捕获零件并轻松获取:
path = str[/\bword3\.woa\.([0-9]+)/, 1]
path
# => 1398
请注意,点会被转义以匹配文字点,1
表示我们只需要提取第一个捕获组的内容。
请参阅Ruby demo online。另请参阅此Rubular demo(请注意“匹配组:”部分)。
请注意,模式匹配:
\b
- 字边界word3\.woa\.
- word3.woa.
文字子字符串([0-9]+)
- 将1个或多个数字捕获到第1组。 Ruby Onigmo正则表达式库支持\K
(匹配重置运算符),因此您实际上可能只匹配左侧上下文,并通过在其后面放置\K
来丢弃它,并抓住1+数字作为普通匹配文本,不需要lookbehinds / capture groups:
path = str[/\bword3\.woa\.\K[0-9]+/]
path
# => 1398
见another Ruby demo。在此处,与\bword3\.woa\.
匹配的所有内容都将被删除,与[0-9]+
匹配的内容会落在生成的匹配值中。
答案 2 :(得分:0)
str = 'word2.woa.1398 word3.woa.1398 word4.woa.1398'
str[/(?<=\sword3\.woa\.)\d+/]
#=> "1398"
(?<=\sword3\.woa\.)
是一个肯定的背后隐藏,要求\d+
在\sword3\.woa\.