我真的没有那么多使用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
答案 0 :(得分:1)
您可以使用像
这样的正则表达式[\p{L}_]+(?=\d)
或
[\w-[\d]]+(?=\d)
请参阅regex demo
模式详情
[\p{L}_]+
- 任意一个或多个字母(包括大写和小写)和/或_
[\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。)