要求:
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”
答案 0 :(得分:1)
您的模式在正确的轨道上。一个简单的解决方法是添加一个肯定的前行(?=.* )
,该行将添加断言字符串中出现空格字符。
^[0-9](?=.* ).*?[a-zA-Z].*[a-zA-Z].*$
这通过要求字符串以数字([0-9]
)开头并且包含两个强制性字母([a-zA-Z]
)起作用。前瞻(?=.* )
断言该字符串至少包含一个空格。
答案 1 :(得分:0)
答案 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].*$
您也可以使用积极的前瞻来断言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+次非空格字符,然后匹配必需空间,然后匹配除换行符以外的任何字符$
声明字符串结尾