如何用RegEx排除符号/字符?

问题描述 投票:2回答:2

问题并不像标题所说的那么简单。我有#$在文字里面的文字。从来没有相邻的#$,但一个词可以有不止一个。

示例:Sta#ck ov#er$flow.

我希望匹配文本中的每个字符,除了#$,它们位于单词的开头或结尾。

字符串:#Sta#ck ov$er#flow

所需的比赛:Sta#ck ov$er#flow

字符串:Sta$ck# +$= $overflo#w

所需的比赛:Sta$ck += overflo#w

这接近完成工作:

[^#\$]([^#\$\s\W]+[#\$]?[^#\$\s\W])*

失败的示例:

字符串:#a $ a #a

匹配:aaa(但我要一个$ a #a)

字符串:#aa $ a #a

匹配:aa $ aa(但我想要aa $ a #a)

请帮我找一个有效的RegEx。

编辑:我没有提到我在C#中使用它。

regex regex-lookarounds
2个回答
0
投票

以下模式匹配上述问题中所有示例案例的正确单个字符(需要处理将它们分组):

(?:|\b[#$]+\b|[\w\s+=])

Demo on RegExr (有关模式的概述,请参阅演示页底部的“工具>>说明”)

警告:请注意,除了样品之外,我没有做太多测试。另请注意,此模式适用于PHP / PCRE版本,而不适用于其他版本,例如JS或Python。


0
投票

这似乎对我有用:\b[^#\$]*[#$]+[^#\$]?\b[\w\s+]*|\s*[^#\$]*

© www.soinside.com 2019 - 2024. All rights reserved.