0

我有一个字符串,我想将除特定模式之外的所有模式提取到另一个变量中。

first_string = "Q13 Hello, World!"

我想Hello, World!从字符串中取出并放入另一个变量中,以便:second_string = "Hello, World!".

我试图创建一个正则表达式来提取除“Q13”之外的所有内容,它适用于 Rubular,但不适用于控制台。

> first_string = "Q13 Hello, World!"
> second_string = first_string.scan(/[^(Q[0-9]{1,})]/)
=>  [" ", "H", "e", "l", "l", "o", ",", " ", "W", "o", "r", "l", "d", "!"] 
> second_string.join()
=> " Hello World!"

这很好,但我不能使用正则表达式丢失前导空格。这不会是一个问题,除非我有一些特定于应用程序的警告......

并非所有字符串都有“Q13”......“Q”会在那里,但数字会改变。我不知道“Q13”会出现在正文的开头还是结尾。我无法确定字符串中将包含什么文本。

我不能依赖那里的领先空间。它也可能是一个尾随空格。

有任何想法吗?

4

2 回答 2

0

试试这个:

second_string = first_string.scan(/\A(?:Q[0-9]+)?(?: )?(.*?)(?: )?(?:Q[0-9]+)?\z/).flatten.first

在 Ruby 控制台中进行实时测试

2.0.0p247 :001 > first_string = "Q12 Hello World! Q87"
 => "Q12 Hello World! Q87"
2.0.0p247 :002 > second_string = first_string.scan(/\A(?:Q[0-9]+)?(?: )?(.*?)(?: )?(?:Q[0-9]+)?\z/).flatten.first
 => "Hello World!"
于 2013-09-15T01:38:25.650 回答
0

假设您想省略 Q[number] 和任何周围的空格:

second_string = first_string.gsub(/\s?Q\d+\s?/, "")

如果你想省略 Q[number] 而不是周围的空格:

second_string = first_string.gsub(/Q\d+/, "")
于 2013-09-15T01:51:13.230 回答