我试图从解析的PDF中提取一对字符串,我有这个提取:
Number:731 / 13/06/2016 1823750212 10/06/2016\n\n\n\n Articolo
http://rubular.com/r/GRI6j4Byz3
我的目标是获取731
和1823750212
值。
我尝试了text[/Number:(.*)Articolo/]
之类的内容,但是它在rubular上有点匹配时会返回nil
。
任何提示?
答案 0 :(得分:2)
字符串的格式是固定的(日期和长号),这样做可以解决问题:
text.scan /\ANumber:(\d+).*?(\d{5,})/
#⇒ [[ "731", "1823750212" ]]
答案 1 :(得分:0)
我假设我们不知道要提取的任何一个字符串的长度(非负整数的表示),只是第一个跟在"Number:"
之后,它位于字符串的开头,并且第二个之前和之后至少有一个空格。
r = /
(?<=\A\Number:) # match beginning of string followed by 'Number:' in a
# positive lookbehind
\d+ # match one or more digits
| # or
(?<=\s) # match a whitespace char in a positive lookbehind
\d+ # match one or more digits
(?=\s) # match a whitespace char in a positive lookbehind
/x # free-spacing regex definition mode
str = "Number:731 / 13/06/2016 1823750212 10/06/2016\n\n\n\n Articolo"
str.scan(r)
#=> ["731", "1823750212"]
如果冒号和"731"
之间可能存在间隔空格,您可以按如下方式修改正则表达式。
r = /
\A # match beginning of string followed by 'Number:' in a
# positive lookbehind
Number: # match string 'Number:'
\s* # match zero or more spaces
\K # forget everything matched so far
\d+ # match one or more digits
| # or
(?<=\s) # match a whitespace char in a positive lookbehind
\d+ # match one or more digits
(?=\s) # match a whitespace char in a positive lookbehind
/x # free-spacing regex definition mode
str = "Number: 731 / 13/06/2016 1823750212 10/06/2016\n\n\n\n Articolo"
str.scan(r)
#=> ["731", "1823750212"]
必须使用\K
,因为Ruby不支持可变长度的正向外观。