在以特定单词开头,后跟以分号分隔的单词的行中,用逗号替换分号并用双引号括起单词

时间:2017-04-23 06:30:08

标签: regex replace notepad++

我尝试使用记事本++更改文件中的某些行,而且我对正则表达式的知识非常少,从而寻求帮助。 任何形式的帮助都是值得的。

找到所有看起来像 See ABC'D EFG;IJKL;FOO;BAR;XXXXson on.

的行
  1. 以单词 "See"
  2. 开头的行
  3. 之后,有大写字母全部用分号分隔
  4. 单词可以有特殊字符

    a)空间

    b) ' (萎缩)

    c) , (逗号)

    d) - (hiphen)

  5. 完整结束 .

  6. 将这些行替换为:

    See:["ABC'D EFG","IJKL","FOO","BAR",....]
    

3 个答案:

答案 0 :(得分:0)

找到什么:See ([A-Z'\-, ]+)\;([A-Z'\-, ]+)\.
替换为:See:["\1", "\2"]
https://regex101.com/r/bfJkN6/3
还在我的记事本++上测试过,见:[“ABC'D EFG”,“IJKL”] 我更新了正则表达式以捕获https://regex101.com/r/bfJkN6/5上的多次点击 See ((([A-Z'\-, ]+)\;)+)([A-Z'\-, ]+)\.

答案 1 :(得分:0)

使用与任何非单词字符匹配的 \W

示例https://regex101.com/r/lFANF0/4

查找 See\s([A-Z' ]+)\W(\w+)\. 替换 See:["$1","$2"]

  

enter image description here

     

1stGroup (\w+\'\w+\s+) \w+ 匹配任何字词(等于[a-zA-Z0-9_]
   + 在一次和无限次之间匹配    \s+ 匹配任何空格字符(等于[\r\n\t\f\v ]
  第二组 (\w+\W*\w+) \W* 匹配任何非字字符(等于[^a-zA-Z0-9_]

答案 2 :(得分:0)

让我们说分号的数量是可变的。你需要两次通过 使用Replace All进行两次传递:

找到:^See \K([A-Z ,;'-]+)\.
替换:["$1"]

然后:

找到:(?:\G(?!^)|^See \["(?=[^"]*"]))[^";]*\K;
替换:", "

第一遍很容易理解,它只找到相应的行,删除最后一个点,并用双引号和方括号之间的大写字母,逗号,空格,分号,撇号和连字符括起部分。

第二遍需要仅替换引号内的分号和方括号内的以See开头的行。为此,我使用第二个分支^See \["(?=[^"]*"])到达有趣的行和第二个分支中的\G锚点,以确保下一个匹配与第一个匹配。由于[^";]*排除了双引号,一旦到达最后一个分号,第一个分支就不能再成功,连续性就会被破坏。