Regex 查找/替换正则表达式以重新排列记事本中的文本++;
我有一些我想重新整理的数据(都在同一条线上),我尝试了多种方法,但都没能奏效 以下是文本示例:Regex 查找/替换正则表达式以重新排列记事本中的文本++;,regex,notepad++,Regex,Notepad++,我有一些我想重新整理的数据(都在同一条线上),我尝试了多种方法,但都没能奏效 以下是文本示例: DATA1="8DE" DATA2="322" DATA3="20" DATA4="19.99" DATA5="0.01" DATA1="FE4" DATA2="222" DATA4="400" DATA3="400" DATA5="0.00" DATA1="CE3" DATA2="444" DATA4="60" DATA5="0.00" DATA3="60" DATA1="MME" DATA3="2
DATA1="8DE" DATA2="322" DATA3="20" DATA4="19.99" DATA5="0.01"
DATA1="FE4" DATA2="222" DATA4="400" DATA3="400" DATA5="0.00"
DATA1="CE3" DATA2="444" DATA4="60" DATA5="0.00" DATA3="60"
DATA1="MME" DATA3="20" DATA4="20" DATA5="0.00"
DATA2="667" DATA4="30" DATA3="30" DATA5="0.00" DATA1="MH4"
这应该是输出:
8DE 322 20 19.99 0.01
FE4 222 400 400 0.00
CE3 444 60 60 0.00
MME 20 20 0.00
MH4 667 30 30 0.00
我尝试了以下方法,但没有效果:
查找:DATA1=\”(.*?\“;DATA2=\”(.*?\“;DATA3=\”(.*?”)“;DATA4=\”(.*?\”“;DATA5=\”(.*?”
替换:\1\2\3\4\5
及
查找:DATA1=\'(?*?)\“;DATA2=\”(?*?)\“;DATA3=\”(?*?)\“;DATA4=\”(?*?)\“;DATA5=\”(?*??)”
替换:$+{d1}$+{d2}$+{d3}$+{d4}$+{d5}
如果有人能帮我或指导我找到正确的答案,我会很高兴(对于任何误解,我深表歉意,因为英语不是我的第一语言)regex
该正则表达式使用可选的lookaheads来定位DATAx
(其中x
是数字),并将“
中的值捕获到一个捕获组中,然后匹配整行(以替换它)
替代品
此替换仅引用捕获组并在它们之间添加制表符,同时按照数据[1,2,3,4,5]
的顺序对它们重新排序
结果
看到它工作了吗
为什么
MME
和MH4
行被翻转?数据遵循相同的模式,但有时排列方式不同,这就是为什么我试图通过REGEXCan重新排列数据,结果是MME,然后是MH4?你目前的方式不可能仅使用regex。哦!我现在明白你的意思了,我编辑了文本,使行顺序正确。是的,您是对的,行保持其顺序。1..2..3..因此…正则表达式中的竖条(|
)表示交替,但不是您希望的方式。请参见@ctwheels在回答中关于“可选lookaheads”的词语。
^(?=.*\bDATA1="([^"]+)"\h*)?(?=.*\bDATA2="([^"]+)"\h*)?(?=.*\bDATA3="([^"]+)"\h*)?(?=.*\bDATA4="([^"]+)"\h*)?(?=.*\bDATA5="([^"]+)"\h*)?.*
$1\t\t$2\t\t$3\t\t$4\t\t$5
8DE 322 20 19.99 0.01
FE4 222 400 400 0.00
CE3 444 60 60 0.00
MME 20 20 0.00
MH4 667 30 30 0.00