正则表达式

时间:2018-01-02 03:56:13

标签: regex

我想知道是否有人可以提供帮助。 我需要编写一个正则表达式,如果最后一个单词是字母数字(数字和字母)或单个数字或单个字母,则抛弃除最后一个单词之外的所有内容。

例如

一楼2号公寓

1A花园公寓

Block 2D

Suite 12

单位C

地下室平面

总务室

我想删除所有不属于实际数字的字词和字符,例如

一楼2号公寓应该成为2

1A花园公寓应该成为1A

Block 2D应该变成2D

套件12应该变为12

单位C应该成为C

地下室单位应变为空白,因为没有涉及数字

一般办公室应该变成空白

非常感谢提前

2 个答案:

答案 0 :(得分:1)

您可以尝试使用正向前瞻,在字符串末尾断言您的要求。

(?:\b[A-Za-z]{1}|\d+|(?=.*\d)[a-zA-Z0-9]+)$

<强>解释

  • 非捕获组(?:
  • 字边界\b
  • 匹配单个字母[A-Za-z]{1}
  • |
  • 一个或多个数字\d+
  • |
  • 一个肯定的前瞻,断言最后一个单词包含数字(?=.*\d)
  • 匹配一个或多个大写/小写字母或数字[a-zA-Z0-9]+
  • 关闭非捕获组)
  • 字符串$
  • 的结尾

答案 1 :(得分:-1)

您使用的是哪种语言?您应该能够通过使用空格分割/爆炸字符串来获得最后一个单词,然后将正则表达式应用于最后一个单词。

如果单词的长度为1,您可能只想处理,以使您的正则表达式更易于理解和排除故障。此正则表达式适用于任何2个字母或更长的单词。

这是一个应该适用于最后一个词的正则表达式。它使用正向前瞻来确保存在一个字母和一个数字。 https://regex101.com/r/i5R9bq/1/

(?=.*[0-9])(?=.*[A-z])[0-9A-z]+