正则表达式不匹配数字后跟某个字符

时间:2017-01-11 12:29:14

标签: c# .net regex

我有一个正则表达式,用于从街道地址获取门牌号码。

\d+([a-z -A-Z]+)?

这适用于Fake Street 123Fake Street 123a等地址。但是现在我遇到了像2. Fake Street 123这样的地址,当然表达式匹配2.而不是123。如何将表达式更改为与.后面的数字不匹配(即23. Fake Street 123a不应与23.123a匹配?

5 个答案:

答案 0 :(得分:2)

还有其他好的答案,解释如何解决找到合适号码的问题。关于问题

  

正则表达式不匹配数字后跟某个字符

\d+($|[^\.\d])

匹配一个数字(至少一个数字),该数字是字符串的结尾或后跟一个也不是.的非数字字符

答案 1 :(得分:1)

如果我说得对,你喜欢让字符串的最后一部分以数字开头,后跟可选字符(例如" a")。

以下Regex确实匹配了所有测试用例:

\d*.$

它会扫描一个数字,然后在字符串末尾的任何其他内容($)

答案 2 :(得分:1)

如果您可以确定某个地址在该号码前至少包含一个字母,则可以使用

@foreach($pple as $userId => $userName)
    <option value="{{ $userId }}">{{ $userName }}</option>
@endforeach

然后通过访问Match.Groups [1](请参阅https://msdn.microsoft.com/en-US/library/system.text.regularexpressions.match.groups(v=vs.110).aspx

获取该号码

答案 3 :(得分:1)

如果您总想捕获字符串的最后一个数字,可以使用结束锚($)。

 (\d+.*)$

https://regex101.com/r/uWrPel/2

此正则表达式将检查空格后跟字符串末尾的任何数字和可选字母。 (请注意,我在捕获组之前有一个空格,以确保将数字与文本分开)

答案 4 :(得分:1)

试试这个,如果您有任何疑问,请告诉我。

@"( [0-9]{1,})"