regex 仅当没有空格时才用管道分隔短语的正则表达式

nwo49xxi  于 2023-04-13  发布在  其他
关注(0)|答案(2)|浏览(162)

我试图弄清楚如何编写一个正则表达式,它用管道分隔短语,但前提是没有空格。
例如,如果我使用这个测试字符串:

Other Suggestions|Like | Comment | Subscribe|134|58|Post |Contact Us

我不希望Like | Comment | SubscribePost |Contact Us被分隔开,因为管道周围有空白。
我试了这个正则表达式:(?<!\s)[^|]+(?!\s)期望(?!\s)对任何空格执行负查找,但似乎不起作用。

2jcobegt

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)|$)

说明:

  • (?<=^|\|)在字符串的开头或|之前,
  • .*?任何符号lasy(非贪婪),
  • (?=(?<=\S)\|(?=\S)|$)后跟行尾或|,条件为:
  • (?<=\S)\|(?=\S)-|应该由非witespace符号包围。

here内容匹配演示

mqkwyuun

mqkwyuun2#

你已经有了一个很好的答案,但是为了分裂它,给予一个简单的答案来匹配pipe然后not-space
\|(?=\S)

相关问题