正则表达式 - 查找所有空格并忽略多行字符串中的连字符分隔的单词
Posted
技术标签:
【中文标题】正则表达式 - 查找所有空格并忽略多行字符串中的连字符分隔的单词【英文标题】:Regex - find all whitespaces and ignore hyphen separated words in multiline string 【发布时间】:2020-03-03 13:12:44 【问题描述】:我想创建一个查找空格并忽略连字符分隔的单词的正则表达式模式。
基本规则是查找任何后续空格([\s]+
),并且不查找模式所在的空格:
[\S]+-[\s]+[\S]+
(我不想匹配空格的模式)
任何其他空格都应该匹配。
匹配的间隔应该只包含空格,而不是其他字符。
例如:
abc abc
应该在位置 3-4 匹配。
abc 定义
应该从 abc 的结尾匹配到 def 的开头。
abc-
定义
不应该匹配。
abc-
定义
应该在 3-4、5-6 匹配。
搜索的字符串是多行的,有很多空格,我想在一次搜索中找到它们。
尝试了许多不同的模式(负前瞻和后瞻),但没有一个能够适用于所有情况。
使用python内置re
模块。
可以进行两次搜索:
搜索所有出现的[\s]+
搜索所有出现的[\S]+-([\s]+)[\S]+
从 (1) 中的匹配项中删除 (2) 中组的匹配项
可以一次搜索吗?
【问题讨论】:
试试r'(?<=[^\s-])\s+(?=\S)|(?<=\S)\s+(?=[^\s-])'
或r'(?<=[^\s-])\s+(?=[^\s-])'
也许是这样,但仍然无法正常工作。 regex101.com/r/qSZq9P/7 见这个例子。这应该不匹配,类似于问题中的示例 3
见regex101.com/r/qSZq9P/9, r'(?<=[^\s-])\s+(?=[^\s-])'
这解决了上面的问题,现在像这样的字符串:“dsa - dsa”应该在空格中匹配两次,而不是在当前模式中。如示例(4)。
也许(?<!-)\s+|(?<=\s-)\s+
regex101.com/r/RqNmpx/1
【参考方案1】:
这个怎么样:
(?<![\s\-])[\s](?!\-\s\n)
(?<![\s\-])
不看一个接一个的空格和 - :(消极看后面)
(?!\-\s\n)
之前不看空格 - 空格和换行:(负向前看)
已编辑:
试试这个:
(?<![\s])[\s+](?!\-\s\n)(?!\n2)
查看您的示例数据后,其中一些包含双换行符:
(?<![\s])
不看空间
(?!\-\s\n)
不看破折号、空格和换行符之前
(?!\n2)
不看双换行符
【讨论】:
不适用于:“abc - abc”。应该产生两个匹配。一个在“-”之前,一个在之后。 编辑后 - "abc\n\ndef" 失败。它应该匹配任何空格,除了问题中指定的那些。 毕竟我认为它只能通过多步正则表达式来完成,因为您的数据在接受的空间之间具有略微相同的条件。让我们等待可能有人有另一种解决方案。以上是关于正则表达式 - 查找所有空格并忽略多行字符串中的连字符分隔的单词的主要内容,如果未能解决你的问题,请参考以下文章