正则表达式检查字符串中的特定字符

时间:2019-07-07 03:52:26

标签: regex

要求:
1.第一个字符是数字
2.字符串包含两个字母
3.在字符串中的任意位置

我能够为(1)和(2)编写代码,但是不确定如何在现有代码中插入(3)。

[0-9].*?[a-zA-Z].*?[a-zA-Z].*

以下内容应不带引号
“ 12as”
“ 63 1/2 W Blanche St”
“埃雷路12A号”
“ 2332 Jones Rd,公寓#5”
“ 2 Jones Rd,Apt#5”
“ 3琼斯路邮政信箱”
“ abc琼斯路4号”
“ 5琼斯-dfe”

3 个答案:

答案 0 :(得分:1)

您的模式在正确的轨道上。一个简单的解决方法是添加一个肯定的前行(?=.* ),该行将添加断言字符串中出现空格字符。

^[0-9](?=.* ).*?[a-zA-Z].*[a-zA-Z].*$

Demo

这通过要求字符串以数字([0-9])开头并且包含两个强制性字母([a-zA-Z])起作用。前瞻(?=.* )断言该字符串至少包含一个空格。

答案 1 :(得分:0)

我认为您不希望设计的表达式那么简单,我们可以从这个低边界表达式开始:

^[0-9]+(?:[A-Za-z]{1,2})?[A-Za-z0-9\s,.\/#-]+$

DEMO 1

答案 2 :(得分:0)

您的模式未考虑强制性空格。您可以使用正向前瞻来断言至少一个空格,方法是将非空格字符匹配0+倍,然后匹配一个空格(?=\S* )

当您使用.*来匹配任何字符时,您也可能会使用否定的字符类[^a-zA-Z\r\n]来不匹配a-zA-Z或换行符,然后匹配a-zA- Z

^[0-9](?=\S* )[^a-zA-Z\r\n]*[a-zA-Z][^a-zA-Z\r\n]*[a-zA-Z].*$

Regex demo

您也可以使用积极的前瞻来断言char a-zA-Z的2倍。然后匹配一个空格,然后匹配字符串的其余部分。

^[0-9](?=(?:[^a-zA-Z\r\n]*[a-zA-Z]){2})\S* .*$

说明

  • ^字符串的开头
  • [0-9]匹配数字
  • (?=正向前进,断言右边是
    • (?:[^a-zA-Z\r\n]*[a-zA-Z]){2}重复分组,匹配a-zA-Z 2次
  • )积极回望
  • \S* .*匹配0+次非空格字符,然后匹配必需空间,然后匹配除换行符以外的任何字符
  • $声明字符串结尾

Regex demo