Answers:
您可以\s*
在正则表达式中的每个其他字符之间插入可选的空白字符。虽然获得批准,但会有点冗长。
/cats/
-> /c\s*a\s*t\s*s/
^([a-z]\s*)+$
在史蒂文对萨姆·杜菲尔的回答的评论中
谢谢,听起来像是要走的路。但是我才意识到,我只需要可选的空格字符(如果它们遵循换行符)。因此,例如,“ c \ n ats”或“ ca \ n ts”应该匹配。但是如果没有换行符,不希望“ c ats”匹配。关于如何做到的任何想法?
这应该可以解决问题:
/c(?:\n\s*)?a(?:\n\s*)?t(?:\n\s*)?s/
请参阅此页面以了解与此匹配的“猫”的所有不同变体。
new RegExp('cats'.split('').join('(?:\n\s*)?'))
您可以\s*
在搜索字符串中的每个字符之间插入一个字符,这样,如果您要寻找猫,就可以使用c\s*a\s*t\s*s\s*s
它很长,但是您当然可以动态地构建字符串。
您可以在这里看到它的工作:http : //www.rubular.com/r/zzWwvppSpE
该方法可用于实现这一目的的自动化(以下示例性解决方案在python中,尽管显然可以移植到任何语言):
您可以预先去除空格并保存非空格字符的位置,以便稍后可以使用它们找出原始字符串中匹配的字符串边界位置,如下所示:
def regex_search_ignore_space(regex, string):
no_spaces = ''
char_positions = []
for pos, char in enumerate(string):
if re.match(r'\S', char): # upper \S matches non-whitespace chars
no_spaces += char
char_positions.append(pos)
match = re.search(regex, no_spaces)
if not match:
return match
# match.start() and match.end() are indices of start and end
# of the found string in the spaceless string
# (as we have searched in it).
start = char_positions[match.start()] # in the original string
end = char_positions[match.end()] # in the original string
matched_string = string[start:end] # see
# the match WITH spaces is returned.
return matched_string
with_spaces = 'a li on and a cat'
print(regex_search_ignore_space('lion', with_spaces))
# prints 'li on'
如果您想走得更远,则可以构造match对象并返回它,因此使用此帮助程序将更加方便。
当然,也可以优化此功能的性能,此示例仅用于说明解决方案的路径。