繁体   English   中英

RegEx查找并替换为记事本++

[英]RegEx find and replace with notepad++

我正在尝试查找逗号,后跟空格以及包含和下划线的字符串,并用新行替换后跟匹配的字符串。

输入

ABC, ZYZ John_Doe 
HBB Dan_Doe
HHH, BBB, CCC April_May 

所需的输出

ABC John_Doe
ZYZ John_Doe
HBB Dan_Doe
HHH April_May
BBB April_May
CCC April_May

我使用的是Notepad ++和RegEx,可以通过在查找中将\\s+和替换中的\\n替换为逗号和空格,但也要匹配该行中包含下划线的字符串,并使其在换行后结束。

任何帮助深表感谢

当您有一个逗号时,此正则表达式将起作用

查找: ^([AZ]{3}), ([AZ]{3}) ([AZ][az].*)

替换为: \\1 \\3\\n\\2 \\3

这将使用两个逗号

查找: ^([AZ]{3}), ([AZ]{3}), ([AZ]{3}) ([AZ][az].*)

替换为: \\1 \\4\\n\\2 \\4\\n\\3 \\4

请注意,这是否是最好的方法,但是我想出了以下模式: (?:(?:^|\\G(?!^)\\h*,\\h*)([[:alnum:]]+\\b)(?=(\\h*,\\h*[[:alnum:]]+)*\\h+([[:alnum:]]+_[[:alnum:]]+\\h*$))|(\\h+[[:alnum:]]+_[[:alnum:]]+\\h*$\\R?)) ,将其替换为(?{1}$1 $3\\n(?{2}~~:):) ,第二个替换为^~~并替换为空字符串。

它可以根据需要进行转换,可以处理任意数量的逗号。 这是它的作用:

(?:^|\G(?!^)\h*,\h*)([[:alnum:]]+\b)(?=(\h*,\h*[[:alnum:]]+)*\h+([[:alnum:]]+_[[:alnum:]]+)\h*$)

这匹配以逗号分隔的字符串(以及前瞻中的下划线值)

  • (?:^|\\G(?!^)\\h*,\\h*)匹配行的开头,或前一个匹配项后跟水平空格,用 逗号隔开 水平空格
  • ([[:alnum:]]+\\b)匹配字母/数字和单词边界,存储到捕获组1中
  • (?=开始前瞻,因此我们实际上并不匹配,只是断言并存储到捕获组中
  • (\\h*,\\h*[[:alnum:]]+)*匹配下一个单词,如果有后续单词,则将最后一个存储到捕获组2中,如果没有后续单词,则捕获组2不匹配
  • \\h+([[:alnum:]]+_[[:alnum:]]+)\\h*$匹配带下划线的单词,将其捕获到第3组中,之前和之后可能有水平空格

(\\h+[[:alnum:]]+_[[:alnum:]]+\\h*$\\R?))

这与带下划线的单词以及以下可选的换行符匹配,因此我们可以将其替换为空字符串。

替换(?{1}$1 $3\\n(?{2}~~:):)检查第一个捕获组是否匹配(因此用逗号分隔的单词之一)。 如果是这样,它将在此单词后面插入空格,下划线单词,换行符,如果不是最后一个单词,则插入~~ 我需要~~以使\\G在所有情况下都能正常工作,您可以使用不太可能在内容中再次出现的任何字符串。 如果第一个捕获组不匹配,则替换将为空。 第二次用^~~替换最终被删除。

使用下面的正则表达式N次,其中N是逗号的最大数在同一条直线:

, ([AZ]*)( \\w*)

用。。。来代替:

$2\\r\\n$1$2

这是一个有用的测试站点


例:

从您发布的输入文本开始,您将不得不使用两次正则表达式:

ABC, ZYZ John_Doe
HBB Dan_Doe
HHH, BBB, CCC April_May

这将是第一次执行的结果:

ABC John_Doe
ZYZ John_Doe
HBB Dan_Doe
HHH, BBB April_May
CCC April_May

这将是第二个结果:

ABC John_Doe
ZYZ John_Doe
HBB Dan_Doe
HHH April_May
BBB April_May
CCC April_May

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM