Regex Ruby正则表达式-如果字符串超过10个字符,请删除第一个字符(如果是“";1“;

Regex Ruby正则表达式-如果字符串超过10个字符,请删除第一个字符(如果是“";1“;,regex,ruby,Regex,Ruby,在不使用gem的情况下,我只想编写一个简单的regex公式,以删除字符串中的第一个字符,如果它是1,并且字符串中的字符总数超过10个。我从来没有期望超过11个字符,11应该是最大值。但是如果有10个字符并且字符串以“1”开头,我不想删除它 str = "19097147835" str&.remove(/\D/).sub(/^1\d{10}$/, "\1").to_i 返回0 我希望它返回“9097147835”您可以使用 str.gsub(/\

在不使用gem的情况下,我只想编写一个简单的regex公式,以删除字符串中的第一个字符,如果它是1,并且字符串中的字符总数超过10个。我从来没有期望超过11个字符,11应该是最大值。但是如果有10个字符并且字符串以“1”开头,我不想删除它

str = "19097147835"
str&.remove(/\D/).sub(/^1\d{10}$/, "\1").to_i
返回
0

我希望它返回“9097147835”

您可以使用

str.gsub(/\D/,“”).sub(/\A1(?=\D{10})/,“”).to_i
请参阅和

正则表达式匹配

  • \A
    -字符串的开头
  • 1
    -a
    1
  • (?=\d{10})
    -当前位置右侧必须有10位数字

您可以使用您的模式,但在10位数字周围添加一个捕获组,以便在替换中使用该组

\A1(\d{10})\z
比如说

str = "19097147835"
puts str.gsub(/\D/, '').sub(/\A1(\d{10})\z/, '\1').to_i
输出

9097147835
9097147835
另一个选项是删除所有非数字,并匹配最后10个数字:

\A1\K\d{10}\z
  • \A
    字符串的开头
  • 1\K
    匹配1并忘记目前匹配的内容
  • \d{10}
    匹配10位数字
  • \z
    字符串结尾
|

输出

9097147835
9097147835
非正则表达式示例:

str = str[1..] if (str.start_with?("1") and str.size > 10)
正则表达式功能强大,但不容易维护