我有一个字符串,我想将除了某个模式之外的所有模式提取到另一个变量中。
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”是否会出现在文本的开头或结尾。我无法确定字符串中的文字是什么。
我不能依赖那里的领先空间。它也可能是一个尾随空间。
有什么想法吗?
答案 0 :(得分:0)
试试这个:
second_string = first_string.scan(/\A(?:Q[0-9]+)?(?: )?(.*?)(?: )?(?:Q[0-9]+)?\z/).flatten.first
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!"
答案 1 :(得分:0)
假设您要省略Q [数字]和任何周围的空格:
second_string = first_string.gsub(/\s?Q\d+\s?/, "")
如果要省略Q [编号]而不是周围的空格:
second_string = first_string.gsub(/Q\d+/, "")