正则表达式:以特定字符结尾的完全匹配字符串

时间:2018-05-16 17:18:16

标签: regex

我正在使用Java。所以我有一个以逗号分隔的字符串列表:

aa,aab,aac
aab,aa,aac
aab,aac,aa

我想使用正则表达式删除aa和尾随''如果它不是列表中的最后一个字符串。在所有3种情况下,我需要得到以下结果:

aab,aac 

目前我使用以下模式:

"aa[,]?"

然而它正在回归:

b,c

5 个答案:

答案 0 :(得分:2)

如果有可用的外观,您可以写:

,aa(?![^,])|(?<![^,])aa,

以空字符串作为替换。

demo

否则,使用POSIX ERE语法,您可以使用捕获:

^(aa(,|$))+|(,aa)+(,|$)

第4组替换(所以$ 4或\ 4)

demo

答案 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,

see online demo

答案 3 :(得分:0)

如果您的正则表达式引擎支持ipositive lookaheads,则应该可以使用:

positive lookbehinds

答案 4 :(得分:0)

您可以使用以下内容并将其替换为任何内容:

(aa,|,aa$) 
  1. aa,当它位于字符串的开头或中间时
  2. ,aa$当它在字符串的末尾
  3. Demo