Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 正则表达式查找和移动_Regex_Find_Move - Fatal编程技术网

Regex 正则表达式查找和移动

Regex 正则表达式查找和移动,regex,find,move,Regex,Find,Move,我希望您不介意回答一个关于正则表达式的问题: 我想在同一个文件中查找并从一个地方移动到另一个地方。这将同时应用于数百个文件。 从以下文本中查找示例:Cat1[更改文本]Cat2并在Dog1[更改文本]Dog2 原始文件: Cat1[variable text]Cat2 [variable text] Dog1[variable text]Dog2 [variable text] Cow1[variable text]Cow2 [variable text] 预期结果: [variable

我希望您不介意回答一个关于正则表达式的问题: 我想在同一个文件中查找并从一个地方移动到另一个地方。这将同时应用于数百个文件。 从以下文本中查找示例:
Cat1[更改文本]Cat2
并在
Dog1[更改文本]Dog2

原始文件:

Cat1[variable text]Cat2 [variable text]
Dog1[variable text]Dog2 [variable text]
Cow1[variable text]Cow2 [variable text]
预期结果:

  [variable text]
Dog1[variable text]Dog2Cat1[variable text]Cat2  [variable text]
Cow1[variable text]Cow2  [variable text]

换句话说,我正在尝试将Cat1和Cat2之间的所有内容移动到同一文件中的不同位置。本例中的新位置紧跟在Dog1…Dog2之后。是否有一个正则表达式允许这样做?非常感谢。

在Python中,您可以使用
re.sub
和匹配组来移动匹配的模式。函数
re.sub
将用相应的匹配组替换反向引用,如
\1

import re

text = """Cat1[text1]Cat2[text2]
Dog1[text3]Dog2[text4]"""


new_text = re.sub(
    r'(Cat1.*?Cat2)(.*?)(Dog1.*?Dog2)',
    r'\2\1\3',
    text,
    flags=re.DOTALL)

print(new_text)
# prints:
# [text2]
# Cat1[text1]Cat2Dog1[text3]Dog2[text4]

[改变文本]的模式是什么,我们能期望在那里有什么?Cat1[某物]Cat2[某物]或在不同的时间它可能是Cat1[绿色蓝色]Cat2[橙色黄色]请提供输入输出的实际示例每当它说变量文本时,它意味着它是出现在两个单词(Cat1…Cat2)内的字母数字文本,而且它因文件而异。唯一不变的标记是Cat1。。。第二类。换言之,Cat1(.*)Cat2。谢谢您的精确性,这很有帮助。尽管如此,请提供输入和输出的实际示例Hank you Olivier的代码。这是Python的吗?@user2828890哦,对不起,我以为你添加了Python标记。是的,对你合适吗?我用的是Emeditor。但是我可以安装Python,如果它能完成这项工作的话。@user2828890 Python是一种处理字符串的可靠语言,而且它的regexp库有很好的文档记录,所以它肯定是一个有效的解决方案。太好了!我刚下载的。我知道我可以花几个小时学习如何开始使用Python,我会这样做。。。但是你能给我一点指导吗。例如,我刚刚下载了Python3.6。现在打开它,我得到一个带有>>>的命令提示符。等我进去。我如何让它处理您之前发送给我的代码?非常感谢。