我正在使用Rails 5。 如何从字符串开头删除第一个字符不是字母的所有单词(即 !~/\p{L}/(? 所以如果我有一个字符串
"1000 22 cc33 dfdsf"
我希望结果是
"cc33 dfdsf"
同样,如果字符串是
"7nnn 2000 388 a 4000 bbb"
我希望结果是
"a 4000 bbb"
我想"单词"只是非空格符号块。
您可以使用
rx = /G[^[:space:]p{L}][^[:space:]]*[[:space:]]*/
puts "1000 22 cc33 dfdsf".gsub(rx, '') # => cc33 dfdsf
puts "7nnn 2000 388 a 4000 bbb".gsub(rx, '') # => a 4000 bbb
在线观看 Ruby 演示
详情:
G
- 字符串的开始或前一场比赛的结束(因此,我们只能从字符串的开头获得连续的匹配([^[:space:]p{L}]
- 不是空格和字母的字符[^[:space:]]*
- 0+ 非空格[[:space:]]*
- 0+ 空格。
您可以使用的另一个正则表达式是/A(?:[^[:space:]p{L}][^[:space:]]*[[:space:]]*)+/
.在这里,A
匹配字符串的开头,(?:...)+
匹配上述模式的 1 次或多次连续出现。
注意:如果要专门匹配字母数字单词,也就是说,如果要删除字符串开头以数字开头的所有单词,则可以使用
/Gp{N}[[:alnum:]]*[^[:alnum:]]*/
或
/A(?:p{N}[[:alnum:]]*[^[:alnum:]]*)+/
其中p{N}
匹配任何数字,[[:alnum:]]
匹配任何字母数字,[^[:alnum:]]
匹配任何非字母数字的字符。查看另一个 Ruby 演示。
此模式搜索,直到根据您的条件找到"单词"的第一个出现,然后它采用所有内容直到字符串的末尾。您可以从匹配的组中提取结果。
.*?b([A-Za-z].*)
将其换成:
.*?b([A-Za-z][sS]*)
如果您需要包括线路终止符。