如何在字符串的开头替换不包含字母的单词?

时间:2017-10-07 14:42:51

标签: ruby regex string

我使用的是Ruby 2.4。我想在我的字符串的开头替换不包含任何字母的单词。 A"字"是由空格(或行的开头或结尾)包围的任何字符序列。例如,这个字符串

   123  255 abc

会变成

abc

while this string

1556  2a2  ccc

会变成

2a2 ccc

我试过了

string.gsub(/\A[[:space:]]*[^\p{L}]+/, '')

但这还没有完成。如何替换字符串开头不包含字母的所有单词?

3 个答案:

答案 0 :(得分:3)

你可能需要一个单词边界(\b)和锚点(而不是\A)。
这按预期工作:

^[[:space:]]*[^\p{L}]+\b

a demo on rubular.com

<小时/> 正如@Cary在评论中所指出的,你甚至可以简化你的表达 \A[^\p{L}]+\(或者每行开头^[^\p{L}]+\)。

答案 1 :(得分:1)

这将:

string.gsub(/^[^a-zA-Z]+\s/, '')

或(如果你想匹配unicode字符):

string.gsub(/^[^\p{L}]+\s/, '')

rubular

查看

答案 2 :(得分:0)

您可以使用.split将字符串拆分为单词,drop_while来过滤正则表达式中的第一个单词:

> '   123  255 abc'.split().drop_while { |e| e=~/^\d+$/ }.join(' ')
=> "abc"
> '1556  2a2  ccc'.split().drop_while { |e| e=~/^\d+$/ }.join(' ')
=> "2a2 ccc"