能否用正则表达式匹配指定字符串任意位置含单个多余空格的情况?
用正则匹配任意位置含单个空格的目标字符串
完全可以用正则表达式实现,而且操作起来并不复杂。
你要匹配的是目标字符串abcdefghijk在任意位置插入恰好一个空格的所有变体,核心思路是:先确保字符串去掉空格后就是目标字符串,同时限制整个字符串只能有一个空格。
对应的正则表达式可以这么写:
^(?=\S*\s\S*$)(?=.*abcdefghijk$).+$
拆解一下逻辑:
^(?=\S*\s\S*$):这个正向预查用来约束字符串里只能有一个空格——\S*匹配任意数量的非空格字符,中间夹一个\s(空格),后面再跟任意数量非空格字符,刚好对应只有一个空格的结构。(?=.*abcdefghijk$):另一个正向预查,确保把字符串里的空格去掉后,剩下的内容就是你要找的目标字符串abcdefghijk。.+$:匹配整个符合条件的字符串。
如果只需要匹配带空格的变体(不需要匹配原字符串),上面的正则正好满足需求。要是想连原字符串一起匹配,把第一个预查改成(?=(?:\S*\s\S*)?$)就行,这样允许0个或1个空格。
另外,如果你想要更直白的写法(适合短字符串),可以直接把所有可能的空格位置列出来,比如:
^a\sbcdefghijk$|^ab\scdefghijk$|^abc\sdefghijk$|^abcd\sefghijk$|^abcde\sfghijk$|^abcdef\sghijk$|^abcdefg\shijk$|^abcdefgh\sijk$|^abcdefghi\sjk$|^abcdefghij\sk$
这种写法虽然长,但逻辑直观,一眼就能看明白匹配的是哪些情况。
内容的提问来源于stack exchange,提问作者chrismead
相关产品推荐
相关产品推荐

