【问题标题】:Optimization of regular expression正则表达式的优化
【发布时间】:2016-06-17 18:54:14
【问题描述】:

我有以下场景

C************************************************* *** C %% 结束模块 %% :ALM_P800B_RUN P800B_PUMP_RUNNING C************************************************* ** C************************************************* *** C %% END MODULE %% :ALM_VALVE_OPEN OPENING_VALVE_001 C************************************************* ** C************************************************* *** C %% 结束模块 %% :ALM_SIGNAL_FAIL LOSS_OF_SIGNAL C************************************************* **

我打算从这些行中删除description100B
我使用以下正则表达式查找和替换字符串

查找: (^C\s%+\s\w[A-Z\s%]+:\w[A-Z_0-9]+)\s\w[A-Z_0-9]+
替换: \1.TAG

最终的结果应该是这样的

C************************************************* *** C %% 结束模块 %% :ALM_P800B_RUN C************************************************* ** C************************************************* *** C %% 结束模块 %% :ALM_VALVE_OPEN C************************************************* ** C************************************************* *** C %% 结束模块 %% :ALM_SIGNAL_FAIL C************************************************* **

我想知道是否有更好的方法来做到这一点?

【问题讨论】:

  • 这看起来很粗鲁,但是check here, ;)
  • 甚至这个[^*]\w+$ - here
  • 为什么要涉及正则表达式?
  • 因为在这些行之间有很多没有显示的文本,而且它们的描述到处都是。这就是为什么
  • 我会使用空格而不是 \s(它也匹配换行符),而那些 \w 并没有做任何有用的事情。另外,您可能不需要那么具体:(^C %%.*) [A-Z_0-9]+

标签: regex sublimetext3


【解决方案1】:

我的第一个:

description100B

只需将您的“目标”替换为“无”。有点基本。

第二个[^*]\w+$ 替换任何“单词字符” - \w,在一个序列中(多个+),前面是*,什么都没有。

编辑:改变条件...这是新的;)

试试

(:\w+)\s*\w+

它会删除: 之后的所有内容(看起来是)。 Check it here.

【讨论】:

  • 对不起,我急着说它有效。请注意,描述会在每个不同的实例中发生变化
  • 我同意你的看法编辑 - 改变条件...但是你的编辑是正确的
  • 正则表达式 (:\w+)\s*\w+ 成功了。我在学习正则表达式方面还有很长的路要走
  • 我们都这样做 ;) 它捕获(因为在括号内)一系列字符/数字(至少一个 - +),后跟任何(可选)空格并且,再一次,后面是一系列字符/挖掘。将其替换为捕获的内容,并且只剩下 那个
猜你喜欢
  • 2012-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-09
相关资源
最近更新 更多