【问题标题】:Regex to match symbols before delimiter正则表达式匹配分隔符之前的符号
【发布时间】:2019-08-27 10:32:36
【问题描述】:

我正在尝试删除出现在我的特定分隔符(即冒号)之前的所有符号。

示例文本:

Pigeon.Salmon-3201@:Cashew123!

期望的输出:

PigeonSalmon3201:Cashew123!

如您所见,“:”之前出现的所有符号都已被删除。

我发现.+?(?=:) 将突出显示我的“:”之前的所有内容

而且这个正则表达式足以匹配所有符号,但我不知道如何将两个正则表达式结合在一起。

[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/]

【问题讨论】:

  • 你使用什么语言?

标签: regex


【解决方案1】:

你可以使用这样的正则表达式:

[-!$%^&*()_+|~=`{}\[\]:";'<>?,.\/@](?=.*:)

“仅当符号后面有 : 时才匹配符号”。这意味着正则表达式将匹配字符串中 last : 之前的所有符号。

Demo

IMO,仅正则表达式的解决方案并不是最好的解决方案。你可以先找到:的索引。然后从该索引循环到 0,删除您看到的所有符号。

【讨论】:

  • 嘿,只是想知道,我将如何为字符串中最后一个 : 之后的所有符号执行此正则表达式,谢谢
  • @StackStackAndStack 同样,混合方法在这里会更好。首先找到最后一个冒号的位置,从该位置开始创建一个子字符串。然后用正则表达式查找子字符串中的所有符号。
【解决方案2】:

您可以简单地拆分 ':' 删除第一部分中的所有符号并使用 ':' 将它们连接起来,甚至无需使用正则表达式。正则表达式问题的答案很有趣,但在这里没有必要。

【讨论】:

  • 非常正确。但是,如果第一部分的 1 行包含所有符号,则连接会搞砸,我很确定。很少发生,但是是的
  • 你这是什么意思? !#$:ABC 应该变成 :ABC,对吧?加入不会搞砸。 @StackStackAndStack
  • 您可以指定拆分限制,使其仅在第一个 ':' 上拆分。如果你没有冒号,你可能不得不以不同的方式处理它。如果有两个部分 !#$ABC 从第一个中删除你不想要的符号(例如 #),然后将它们与 : 连接起来以生成 !$:ABC
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-11
  • 2017-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多