【问题标题】:How do I conditionally add a space in a regex replace如何有条件地在正则表达式替换中添加空格
【发布时间】:2017-10-22 18:29:46
【问题描述】:

当我今天早上醒来时,我对正则表达式一无所知。当我去弥撒时,我已经能够拼凑这个正则表达式来查找 html 文档中出现的“Mph”。

(?i)(?

如果我针对以下测试数据运行它:

<div class="vsMph">
<p>95 Mph</p>
</div>
<div class="vsMph">
<p>95Mph</p>
</div>

正确匹配:

‘ Mph’ and
‘Mph’

同样正确地留下“vsMph”,这正是我想要的。最终,我将使用相同的技术来匹配节、英尺、英寸、公里等。

我正在使用 RegReplace 在 Sublime Text 3 中执行这个表达式,最终,我希望做的是使用这个正则表达式来查找所有出现在空格或数字前面的“Mph”,并且:

  1. &lt;abbr&gt; 标签中包含“Mph”。
  2. 在数字和数字之间添加一个空格 如果最后一个数字之间没有空格,则打开 &lt;abbr&gt; 标签 最初是“英里/小时”。

也就是说,我想把上面的测试数据转换成:

<div class="vsMph">
<p>95 <abbr title="Miles per hour">Mph</abbr></p>
</div>
<div class="vsMph">
<p>95 <abbr title="Miles per hour">Mph</abbr></p>
</div>

我可以让 RegReplace 添加&lt;abbr&gt; 标记,如上面 1. 中所述,但我在 Google 上进行了搜索,但找不到任何告诉我如何有条件地在正则表达式替换中插入空格的信息。

所以我想知道。首先是否可以有条件地在正则表达式替换中添加一个空格,如果可以,我该怎么做,或者我必须搜索“\sMph”和“\dMph”并分别替换它们?

问候。

【问题讨论】:

  • 正则表达式替换不能做到这一点。进行两次替换。

标签: regex sublimetext3


【解决方案1】:

我建议使用组来匹配Mph。您可以简单地搜索以下正则表达式:

(\d)(\s)?(Mph)

然后使用组替换

$1 <abbr title="Miles per hour">$3</abbr>

输出:

<div class="vsMph">
<p>95 <abbr title="Miles per hour">Mph</abbr></p>
</div>
<div class="vsMph">
<p>95 <abbr title="Miles per hour">Mph</abbr></p>
</div>

【讨论】:

  • 感谢易卜拉欣。我玩过这个解决方案,我所要做的就是将 $1 更改为 \\1 并将 $3 更改为 \\3 因为我可能使用的正则表达式方言与您不同。
  • 我现在可以将正则表达式修改为:查找:(&lt;span class="subScript"&gt;)(.*)?(&lt;/span&gt;) 替换:&lt;sub&gt;\\2&lt;/sub&gt; 并将:V&lt;span class="subScript"&gt;NO&lt;/span&gt; 更改为:`VNO`
  • 而这个获得“英寸汞柱”的所有变体 查找:(?i)(\d)(\s)?(in.hg|in. hg|” hg) 替换 \1 &lt;abbr title=\"Inches of mercury\"&gt;In.Hg&lt;/abbr&gt;。我认为这对我来说已经足够了。这里有足够的变化可以为未来的询问者指明正确的方向,我不太可能再想出更多。所以再次感谢您的帮助易卜拉欣。一遍又一遍。
  • 没问题,很高兴我能帮助@Pontiusthepilot,很高兴看到代码对你有用。
猜你喜欢
  • 1970-01-01
  • 2016-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-12
  • 1970-01-01
相关资源
最近更新 更多