RegEx超过多个字符之前的数字

时间:2017-09-22 20:40:52

标签: regex

我真的没有那么多使用RegEx。你可以说我是RegEx n00b。我已经在这个问题上工作了半天。

我正在尝试编写一个从数字字符向后看的模式。例如:

1. bob1 => bob
2. cat3 => cat
3. Mary34 => Mary

到目前为止,我有(?![A-Z][a-z]{1,})([A-Za-z_]) 它只匹配单个字符,我想要数字字符前面的所有字符。我尝试将^$添加到我的模式中并使用online simulator。我不确定将^$放在哪里。

注意:我正在使用.NET Framework的RegEx

2 个答案:

答案 0 :(得分:1)

您可以使用像

这样的正则表达式
[\p{L}_]+(?=\d)

[\w-[\d]]+(?=\d)

请参阅regex demo

模式详情

  • [\p{L}_]+ - 任意一个或多个字母(包括大写和小写)和/或_
    OR
  • [\w-[\d]]+ - 1个或多个字符数字(字符类中的-[]是字符类减法构造)
  • (?=\d) - 一个积极的前瞻,要求数字立即显示在当前位置的右侧

答案 1 :(得分:0)

如果我们打破您的RegEx,我们会看到:

(?![A-Z][a-z]{1,})表示“向前看以找到不是一个大写字母的字符串,后跟一个或多个小写字母”和([A-Za-z_])表示“匹配一个字母或下划线”。这应该最终匹配任何单个小写字母。

如果我理解你想要达到的目标,那么你需要一个数字之前的所有字母。我会写这样的东西:

\b([a-zA-Z]+)[0-9]

这将从单词边界\b开始,匹配一个或多个字母,并在匹配的字符串后面需要一个数字。

(我使用的语法似乎与关于.NET RegEx的文档相匹配:https://docs.microsoft.com/en-us/dotnet/standard/base-types/regular-expressions

根据Wiktor Stribizew的评论,这里是纯粹的匹配RegEx:

\b[a-zA-Z_]+(?=[0-9])

这与模式匹配,然后向前看数字。这比我的第一次前瞻尝试要好。 (谢谢Wiktor。)

http://www.rexegg.com/regex-lookarounds.html