我试图弄清楚如何编写一个正则表达式,它用管道分隔短语,但前提是没有空格。例如,如果我使用这个测试字符串:
Other Suggestions|Like | Comment | Subscribe|134|58|Post |Contact Us
我不希望Like | Comment | Subscribe或Post |Contact Us被分隔开,因为管道周围有空白。我试了这个正则表达式:(?<!\s)[^|]+(?!\s)期望(?!\s)对任何空格执行负查找,但似乎不起作用。
Like | Comment | Subscribe
Post |Contact Us
(?<!\s)[^|]+(?!\s)
2jcobegt1#
不匹配内容,匹配分隔符并使用拆分。大致沿着这样的:
QString s("Other Suggestions|Like | Comment | Subscribe|134|58|Post |Contact Us"); QStringList sl = s.split(QRegularExpression("(?<!\s)\|(?!\s)"));
在这里,regex (?<!\s)\|(?!\s)搜索两边都没有空白符号的|。regex101演示
(?<!\s)\|(?!\s)
|
**编辑:**如果你出于某种原因真的需要匹配内容,我相信你可以使用这个正则表达式:
(?<=^|\|).*?(?=(?<=\S)\|(?=\S)|$)
说明:
(?<=^|\|)
.*?
(?=(?<=\S)\|(?=\S)|$)
(?<=\S)\|(?=\S)
here内容匹配演示
mqkwyuun2#
你已经有了一个很好的答案,但是为了分裂它,给予一个简单的答案来匹配pipe然后not-space:\|(?=\S)
pipe
not-space
\|(?=\S)
2条答案
按热度按时间2jcobegt1#
不匹配内容,匹配分隔符并使用拆分。
大致沿着这样的:
在这里,regex
(?<!\s)\|(?!\s)
搜索两边都没有空白符号的|
。regex101演示
**编辑:**如果你出于某种原因真的需要匹配内容,我相信你可以使用这个正则表达式:
说明:
(?<=^|\|)
在字符串的开头或|
之前,.*?
任何符号lasy(非贪婪),(?=(?<=\S)\|(?=\S)|$)
后跟行尾或|
,条件为:(?<=\S)\|(?=\S)
-|
应该由非witespace符号包围。here内容匹配演示
mqkwyuun2#
你已经有了一个很好的答案,但是为了分裂它,给予一个简单的答案来匹配
pipe
然后not-space
:\|(?=\S)