【问题标题】:Is it possible to replace specific characters inside a regex sequence?是否可以替换正则表达式序列中的特定字符?
【发布时间】:2014-09-30 09:35:32
【问题描述】:

假设我有以下文本:

#Foo foo bar bar
foo bar foo
#bar Foo Foo
foo bar

假设我想用- 字符替换以# 字符开头的行中的空格键。所以输出应该是:

#Foo-foo-bar-bar
foo bar foo
#bar-Foo-Foo
foo bar

我知道我可以使用这个正则表达式找到这些行:

/^#(.*)$/gm

但是我真的可以以任何方式改变那些$1 序列吗?

附:我在 notepad++ 中使用正则表达式将一些数据从 excel 转换为代码(实际上非​​常方便)。

P.S.2 我还必须替换文本中的一些制表符,在稍微修改了 Avinash Raj 的答案后,我发现我可以使用这个正则表达式来做到这一点......除了它没有按预期工作,但 Avinash Raj 很友善,没有再次使用这个正则表达式提供帮助。

/(?:^#|(?<!^)\G)[\S ]*\K\t/gm

DEMO

【问题讨论】:

  • 你的预期输出是什么?
  • @AvinashRaj 有效点,完全忘记了(-_-;)
  • @AvinashRaj 为问题添加了预期输出

标签: regex notepad++


【解决方案1】:

我认为notepad++ 会支持\G。锚点\G 匹配上一场比赛结束的位置。

正则表达式:

(?:^#|(?<!^)\G)\S*\K[ \t]+

替换字符串:

-

DEMO

如果您想用- 替换单个空格,请尝试以下正则表达式,

(?:^#|(?<!^)\G)\S*\K[ \t]

【讨论】:

  • 为什么是\S?它只会导致模式不适用于#foo\t bar。为什么是`+`?这会将多个连续的空格转换为一个破折号。
  • @Rawing 我认为现在它适用于所有情况。或者干脆使用\h 而不是[ \t]
  • 感谢第二个例子。尽管第一个处理问题中提供的测试数据,但当我对其进行更改以适应我的特定问题时,它不起作用。但是,第二个示例在我的更改中按预期工作。
  • 我认为这是因为您的输入文件中存在制表符。普通空格不会匹配制表符,\s 也会匹配换行符。所以我在字符类中添加了空格和\t
  • 你能看看regex101.com/r/aW3pR4/1 吗?我以为我设法更改了您的正则表达式以替换制表符,但它似乎不符合行尾。
猜你喜欢
  • 2011-12-14
  • 2021-12-19
  • 2014-05-05
  • 1970-01-01
  • 2021-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-03-21
  • 1970-01-01
相关资源
最近更新 更多