【问题标题】:ruby regex for after exact string [duplicate]用于精确字符串后的 ruby​​ 正则表达式 [重复]
【发布时间】:2014-12-11 06:16:33
【问题描述】:

我想从以下示例中获取ASIA

/scripts/skw.asp?term=&department=ASIA

你知道如何从整个文本中提取部门值吗?

【问题讨论】:

标签: ruby regex


【解决方案1】:
string = "/scripts/skw.asp?term=&department=ASIA&a=b"    
puts string[/department=(\w+)/, 1] # => "ASIA"

或者您可以将其解析为查询(我认为这更合适):

require 'cgi'

string = "/scripts/skw.asp?term=&department=ASIA&a=b" 
query        = string.split('?')[1] # => "term=&department=ASIA&a=b"
parsed_query = CGI::parse(query)    # => {"term"=>[""], "department"=>["ASIA"], "a"=>["b"]}
puts parsed_query['department'][0]  # => "ASIA"

【讨论】:

  • 如果部门包含非单词字符,例如 URL 编码的空格,即&department=Customer%20Service,这将不起作用。
  • /department=(.+)&?/
【解决方案2】:
str = '/scripts/skw.asp?term=&department=ASIA'

您可以使用捕获组:

str[/\bdepartment=(.+$)/, 1]
  #=> "ASIA"

或积极的回顾:

str[/(?<=\bdepartment=).+$/]
  #=> "ASIA"

【讨论】:

  • 虽然这是一种有趣的方法,但如果最后会有另一个参数,或者如果您只是在现有字符串中切换termdepartment 的位置,就像这样@ 987654326@
  • 我从问题中假设字符串以要返回的子字符串结尾。如果不是这种情况,则需要知道如何确定要返回的子字符串在哪里结束。问题中没有给出,我没有对字符串的来源或使用方式做出任何假设。
  • 我认为\W 不会像您认为的那样做。也许你心里有\b
  • @pguardiario,抱歉回复晚了。我不想要\b,因为“部门”前面可能有一个非字母字符,如示例中所示。 \W 不完全是,但我认为它已经足够接近了。
  • 检查非单词 char 的存在和检查单词 char 的不存在之间的区别。 \b 是你想要的。
猜你喜欢
  • 1970-01-01
  • 2015-07-10
  • 2020-10-26
  • 2017-07-30
  • 1970-01-01
  • 2011-08-10
  • 2011-06-06
  • 1970-01-01
相关资源
最近更新 更多