【问题标题】:Pattern regex substitution in Notepad++ [closed]Notepad ++中的模式正则表达式替换[关闭]
【发布时间】:2016-05-04 17:04:09
【问题描述】:

如何在 Notepad++ 和 Linux / Unix Korn shell (Plain BSD Linux) 中实现这种正则表达式替换?

z1.9z.01.01           Yabdadba do 
da.8p.25.7p           Foobar
tg.7j.75.2q           Whatever
90.6q.88.zx           Jane Doe

注意 字符。我不知道你想怎么称呼它。

替换 #1
o/p 应该是

Yabdadba do 
Foobar
Whatever
Jane Doe

替换 #2
o/p 应该是

   9z           Yabdadba do 
   8p           Foobar
   7j           Whatever
   6q           Jane Doe

换人 #3
o/p 应该是

z1.9z.01.01 
da.8p.25.7p
tg.7j.75.2q
90.6q.88.zx

我尝试将^.*$ 与正则表达式选项一起使用,但它不会做任何事情。

【问题讨论】:

  • 你尝试了什么?你得到了什么?
  • 非常感谢大家。我希望我可以选择超过 1 个 ans 并将它们作为决胜局。但它不会 lemmw...bur 不过还是谢谢你。

标签: regex shell unix notepad++


【解决方案1】:

假设零件是固定的并且这种形式为 XX.XX.XX.XX

替换 #1
查找(?m)^[^.\s]{2}(?:\.[^.\s]{2}){3}[^\S\r\n]+(?=\S.*)
替换nothing

 (?m)                          # Multi-line mode
 ^                             # BOL
 [^.\s]{2}                     # Four parts separated by dot's
 (?: \. [^.\s]{2} ){3}
 [^\S\r\n]+                    # Whitespace following
 (?= \S .* )                   # Must be some text here

替换 #2
查找(?m)^[^.\s]{2}\.([^.\s]{2})(?:\.[^.\s]{2}){2}(?=[^\S\r\n]+\S.*)
替换' $1 '

 (?m)                          # Multi-line mode
 ^                             # BOL
 [^.\s]{2}                     # Four parts separated by dot's

 \. 
 ( [^.\s]{2} )                 # (1)
 (?: \. [^.\s]{2} ){2}
 (?=                           # Whitespace following
      [^\S\r\n]+ 
      \S .*                         # Must be some text here
 )

替换 #3
查找(?m)^([^.\s]{2}(?:\.[^.\s]{2}){3})[^\S\r\n]+\S.*
替换$1

 (?m)                          # Multi-line mode
 ^                             # BOL
 (                             # (1 start), Four parts separated by dot's
      [^.\s]{2} 
      (?: \. [^.\s]{2} ){3}
 )                             # (1 end)
 [^\S\r\n]+                    # Whitespace following
 \S .*                         # Must be some text here

【讨论】:

  • 非常感谢大家。我希望我可以选择超过 1 个 ans 并将它们作为决胜局。但它不会 lemmw...bur 不过还是谢谢你。
【解决方案2】:

^([a-z0-9]+?[.]([a-z0-9]+?)[.][a-z0-9]+?[.][a-z0-9]+?[ ]+(.+)$

捕获组 1 包含虚线字符串

捕获组 2 包含虚线字符串的第二项

捕获组 3 包含右侧的名称。

你可以试试regex tester online

【讨论】:

  • 非常感谢大家。我希望我可以选择超过 1 个 ans 并将它们作为决胜局。但它不会 lemmw...bur 不过还是谢谢你
【解决方案3】:

既然你提到了 Unix shell:

  1. cut -f2 yourfileawk '{print $2}' yourfile
  2. awk -F"[\t.]" '{print $2, $5}' yourfile
  3. cut -f1 yourfileawk '{print $1}' yourfile

cut 从文件中选择字段,因此您的第一个和最后一个问题要求选择第二个和第一个字段。 awk 更通用,但可用于相同的任务。 您的第二个问题要求打印第二个和第五个字段(由制表符或“。”分隔的字段)。

【讨论】:

  • 非常感谢大家。我希望我可以选择超过 1 个 ans 并将它们作为决胜局。但它不会 lemmw...bur 不过还是谢谢你。
【解决方案4】:

对于notepad++

替换 #1

find = ^.*?\s+(.*?)$
repalce = \1


替换 #2

find = ^(\w{2})\.(\w{2})\.(\w{2})\.(\w{2})\s+(.*?)$
repalce = \2 \5


替换 #3

find = ^([a-z0-9.]+).*?$
repalce = \1

【讨论】:

  • 非常感谢大家。我希望我可以选择超过 1 个 ans 并将它们作为决胜局。但它不会 lemmw...bur 不过还是谢谢你
猜你喜欢
  • 2012-04-01
  • 1970-01-01
  • 2022-11-24
  • 2014-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-25
  • 1970-01-01
相关资源
最近更新 更多