【问题标题】:Regex to handle leading spaces (notepad++)正则表达式处理前导空格(记事本++)
【发布时间】:2015-11-23 18:03:54
【问题描述】:

我在记事本++中打开的文件中有一行

  0 <? 0.00 - (multi) Salt

注意:行首有 2 个前导空格。

只使用一个中的正则表达式替换,我必须将上面的行更改为:

0,0.00,multi,Salt   

我试过的是:替换

  ( \d*) <\? \d.\d\d - \(multi\) *

\1,\2,multi,

它工作正常。唯一的问题是它在记事本++的每一行都添加了一个前导空格

如何修改我的正则表达式以不在每一行的开头添加前导空格?

注意 L 我不能使用“在记事本中修剪前导空格”选项。

有人可以帮我解决这个问题吗?

提前致谢!

注意:我的文件有更多类似的行

  0 <? 0.00 - (multi) Salt  
  1 <? 0.00 - (multi) Vinegar   
  2 <? 0.00 - (multi) Salt and Vinegar  
  3 <? 0.00 - (multi) BBQ Sauce 
  4 <? 0.00 - (multi) Chilli Sauce  
  5 <? 0.00 - (multi) Hawaiian Sauce    
  6 <? 0.00 - (multi) Brown Sauce   
  7 <? 0.00 - (multi) Garlic Mayo and Herb Sauce    
  8 <? 0.00 - (multi) Mayo  
  9 <? 0.00 - (multi) Salad 
  10 <? 0.00 - (multi) Lettuce  
  11 <? 0.00 - (multi) Cabbage  

【问题讨论】:

  • 只需将空间移出捕获组 - " (\d*) &lt;\? \d.\d\d - \(multi\) *"。见^ {2}(\d*) *&lt;\? *(\d\.\d{2}) *- *\(multi\) *
  • 我试过了。它仍然在行首添加一个空格。
  • 查看我的演示。我认为它应该有效。
  • 您的演示看起来很棒。不知道为什么它与我的记事本++编辑器中的任何行都不匹配,不管替换
  • 你检查了正则表达式框吗?空格是常规空格还是硬空格 ( )?

标签: regex notepad++


【解决方案1】:

要在 Notepad++ 中使用基于正则表达式的替换,请打开“查找和替换”窗口底部的正则表达式单选按钮!(请参阅下面的设置)

这是一个必须为您工作的正则表达式:

^\h{2}(\d*)\h*<\?\h*(\d\.\d{2})\h*-\h*\(multi\)\h*

替换为\1,\2,multi,

\h 是一个水平空格(排除换行符)。 {2} 限制量词可以匹配两次出现(无需重复子模式)。

查看设置:

注意:如果前导空格超过 1 个,请将 \h{2} 更改为 \h{2,}

^\h{2,}(\d*)\h*<\?\h*(\d\.\d{2})\h*-\h*\(multi\)\h*

【讨论】:

  • 你的行中没有前导空格吗?
  • 无处可见。您在屏幕截图中的哪个位置看到它?只有尾随空格。您需要删除尾随空格吗?使用\h+$ 替换为空字符串。
  • 请考虑接受。您接受了一个无效的解决方案。
  • 此外,如果您转到查看菜单并检查 显示符号 -> 显示所有字符,您可以轻松检查有多少空格。
  • 我的错……我接受了错误的答案。我已经尝试撤消它并接受了您的回答
【解决方案2】:
"  ( \d*) <\? \d.\d\d - \(multi\) *" 

您的正则表达式在第一组中有一个空格:( \d*)。删除它,你会没事的:(\d*)。但是,(不相关)您还没有捕获您的第二组,也没有捕获Salt

【讨论】:

  • 我刚刚尝试过。 (\d*)
  • @user2805924 如果答案不起作用,您不应该接受它。在接受之前总是测试答案。
  • @chris85 在这种情况下,情况正好相反:先发表评论,然后显然发现它毕竟是错误的,然后答案被接受了。不过,我确实同意您对一致性的担忧;一种解决方法是删除最初的评论。
  • 是的,在这种情况下这是一个不好的评论。 @user2805924 您应该删除该评论,这样以后的访问者就不会跳过。
【解决方案3】:

^\h+(\d+)\h*&lt;\?\h*([\d.]+)\W+(\w+)\W+([\w\h]+?)\h*$here

【讨论】:

    【解决方案4】:

    在我的编辑器中捕获四个组中的所有内容

    查找内容:\s\s(\d+).+(\d[.]\d+).+\((\w+).*?(\w+\b)
    替换为:$1,$2,$3,$4

    请参阅下面的附件照片..

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      相关资源
      最近更新 更多