Ruby on rails Ruby中包含给定字符串的单词
我正在编写一个小Rails api应用程序,我需要分析字符串以找到给定字符串的单词,如: 假设我的源文本是Ruby on rails Ruby中包含给定字符串的单词,ruby-on-rails,ruby,regex,string,Ruby On Rails,Ruby,Regex,String,我正在编写一个小Rails api应用程序,我需要分析字符串以找到给定字符串的单词,如: 假设我的源文本是您好先生一二三四九一九,我想检查在上的出现情况,它将生成:one,如果我在同一字符串中检查ne t的出现情况,它将生成one-two 我知道用子字符串、计算位置和解析字符串的方法很难看,但我认为用正则表达式扫描可以解决这个问题 如果您需要其他信息,请说,谢谢。使用正则表达式: search = "on" /\s([^\s]*#{search}.[^\s]*)\s/.match("hello
您好先生一二三四九一九
,我想检查在上的出现情况,它将生成:one
,如果我在同一字符串中检查ne t
的出现情况,它将生成one-two
我知道用子字符串、计算位置和解析字符串的方法很难看,但我认为用正则表达式扫描可以解决这个问题
如果您需要其他信息,请说,谢谢。使用正则表达式:
search = "on"
/\s([^\s]*#{search}.[^\s]*)\s/.match("hello mr one two three four nine nineteen")[1]
# returns "one"
search = "ne t"
/\s([^\s]*#{search}.[^\s]*)\s/.match("hello mr one two three four nine nineteen")[1]
# returns "one two"
它的工作方式是找到您要查找的子字符串,然后将附加到子字符串两端的任何附加字符分组,并在两端的第一个空格处停止
▶ str = 'hello mr one two three four nine nineteen'
#⇒ "hello mr one two three four nine nineteen"
▶ re = ->(pattern) { /\p{L}*#{pattern}\p{L}*/ }
▶ str[re.('ne t')]
#⇒ "one two"
▶ str[re.('on')]
#⇒ "one"
通常优于\w
,尤其是\S
,因为它匹配所有utf-8字母
为了匹配重音字母(即在“naỉve”中组合的ỉ
),应该扩展左匹配符和右匹配符:
▶ re = ->(pattern) { /[\p{L}\p{Mc}]*#{pattern}[\p{L}\p{Mc}]*/ }
请注意,上面的代码将返回第一个匹配项。要返回所有匹配项,请使用String 35; scan
而不是String[]
:
▶ str.scan re.('ni')
#⇒ ["nine", "nineteen"]
[^\s]
将被写成\s
,您的解决方案将匹配标点、逗号、点等。除此之外,它不会匹配字符串开头的单词(“给出的示例中的hello”)和字符串结尾的单词(“十九”),这个解决方案既不健壮,也不正确……或者放入一个方法:defmatch(str,pattern);str[/[\p{L}\p{Mc}]*.{pattern}[\p{L}\p{Mc}]*/];结束
。谢谢你,卡里,谢谢你!