我正在使用Java。所以我有一个以逗号分隔的字符串列表:
aa,aab,aac
aab,aa,aac
aab,aac,aa
我想使用正则表达式删除aa和尾随''如果它不是列表中的最后一个字符串。在所有3种情况下,我需要得到以下结果:
aab,aac
目前我使用以下模式:
"aa[,]?"
然而它正在回归:
b,c
答案 0 :(得分:2)
如果有可用的外观,您可以写:
,aa(?![^,])|(?<![^,])aa,
以空字符串作为替换。
否则,使用POSIX ERE语法,您可以使用捕获:
^(aa(,|$))+|(,aa)+(,|$)
第4组替换(所以$ 4或\ 4)
答案 1 :(得分:1)
在不知道你的味道的情况下,我建议这个解决方案知道\b
。
我使用perl作为演示环境并使用&#34; _&#34;用于演示。
perl -pe "s/\baa,|,aa\b/_/"
\b
是&#34;字边框&#34;锚。即任何看起来像一个单词的东西的开始或结束。它允许处理行结束,行开始,空白,逗号
使用它,两个备选方案足以涵盖样本输入中的所有情况。
输出(使用交错输入,两者,行以换行符结束,行以空白结束):
aa,aab,aac
_aab,aac
aab,aa,aac
aab_,aac
aab,aac,aa
aab,aac_
aa,aab,aac
_aab,aac
aab,aa,aac
aab_,aac
aab,aac,aa
aab,aac_
如果您的正则表达式引擎中未知\b
,请说明您正在使用哪一个,即哪个工具(例如perl,awk,notepad ++,sed,...)。同样在这种情况下,可能需要更换而不是删除,即微调&#34;,#34;或&#34;&#34;作为替代品。为了支持这一点,请显示正则表达式的上下文,即您正在使用的替换机制。如果您要删除,请事先切换到替换。
(我从gisek的评论中得到了一个输入,不需要cpaturing组。我通常慷慨地使用()
,包括其他语法。在我看来,不必考虑或查找评估订单是总时间和风险的好处。但经过测试,我使用这种terser / eleganter方式。)
答案 2 :(得分:0)
由于您要删除aa
后跟昏迷或行尾,这应该可以解决问题:,aa(?=,|$)|^aa,
答案 3 :(得分:0)
如果您的正则表达式引擎支持i
和positive lookaheads
,则应该可以使用:
positive lookbehinds
答案 4 :(得分:0)