问题并不像标题所说的那么简单。我有#
和$
在文字里面的文字。从来没有相邻的#
或$
,但一个词可以有不止一个。
示例: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#中使用它。
以下模式匹配上述问题中所有示例案例的正确单个字符(需要处理将它们分组):
(?:|\b[#$]+\b|[\w\s+=])
Demo on RegExr (有关模式的概述,请参阅演示页底部的“工具>>说明”)
警告:请注意,除了样品之外,我没有做太多测试。另请注意,此模式适用于PHP / PCRE版本,而不适用于其他版本,例如JS或Python。
这似乎对我有用:\b[^#\$]*[#$]+[^#\$]?\b[\w\s+]*|\s*[^#\$]*