Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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
Python 正则表达式,仅显示彩色线(来自git diff输出)_Python_Regex_Git - Fatal编程技术网

Python 正则表达式,仅显示彩色线(来自git diff输出)

Python 正则表达式,仅显示彩色线(来自git diff输出),python,regex,git,Python,Regex,Git,我有一个字符串x,看起来像这样。前面带加号的行是彩色编码的 diff --git js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java index 55597bf..9115830 100644 --- js/js.tests/test/org/

我有一个字符串
x
,看起来像这样。前面带加号的行是彩色编码的

diff --git js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java
index 55597bf..9115830 100644
--- js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java
+++ js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java
@@ -38,0 +39,6 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest {
+    @TestMetadata("chainedCall.kt")
+    public void testChainedCall() throws Exception {
+        String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/chainedCall.kt");
+        doTest(fileName);
+    }
+
@@ -92,0 +99,6 @@ public class JsLineNumberTestGenerated extends AbstractJsLineNumberTest {
+    @TestMetadata("longLiteral.kt")
+    public void testLongLiteral() throws Exception {
+        String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/longLiteral.kt");
+        doTest(fileName);
+    }
+
我想提取绿线,这样最后我有两个字符串(字符串数组),如下所示:

    @TestMetadata("chainedCall.kt")
    public void testChainedCall() throws Exception {
        String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/chainedCall.kt");
        doTest(fileName);
    }
import re

for chunk in re.findall(r'((?:[^\n]*\x1b\[32m[^\n]*\n)+)', x):
    print chunk

git diff的原始输出如下(您还可以看到颜色代码):

我发现一个正则表达式实际上可以匹配绿色,但我在将其应用于具体问题时遇到了问题:


/^\e\[32m\+\e\[m\e\[32m(.*)\e\[m$/

您只需测试序列是否在以下行中:

for line in x.split('\n'):
    if '\x1b[32m' in line:
        print line
如果您真的需要查找所有包含绿色esc序列的线组,您可以这样做:

    @TestMetadata("chainedCall.kt")
    public void testChainedCall() throws Exception {
        String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/chainedCall.kt");
        doTest(fileName);
    }
import re

for chunk in re.findall(r'((?:[^\n]*\x1b\[32m[^\n]*\n)+)', x):
    print chunk
但我认为搜索转义序列是一种黑客行为。
git
根据正在使用的终端决定如何制作绿色的东西等。如果你去另一个终端,你可能会得到不同的转义序列。此外,
git
可能会决定不打印彩色代码,以防它注意到它的输出不可用一种终端,但与另一进程或文件连接


不过,我没有找到简单的替代方法,没有调整
git
以特殊格式或类似格式打印添加的行。因此,唯一真正干净的方法是完全解析
git
输出(就像
patch
可以)也就是说,把它所说的行数考虑进去,而忽略了格式化。但是,仅仅用模式匹配是不可能的。

你是否考虑过用“代码> +/CODE >开始的行?”一点是,当处理UNIX命令的ASCII输出时,颜色会被抑制;它们只在屏幕上有意义。Grams在注意到其输出被传递到另一个命令时立即停止生成颜色代码。链接问题中公认的答案是颜色代码,因为前面可能有其他带有加号的行。此外,我正在使用GitPython使用Python,因此没有可用的grep。我不是指Unix命令
grep
,我指的是grepping(获取与正则表达式匹配的内容)。请允许我注意,可以使用参数
--color=always
强制git输出颜色代码。但是没有记录git将使用哪些颜色代码
git
。这可能取决于当前的终端。但是,Linux上的版本2.7.4似乎是不可知的,并且无论终端如何,都始终使用相同的颜色代码。我不会这样做I don’我敢打赌,更高版本或Windows版本(或更为bizarr的版本)总是会这样做。颜色代码只是不需要搜索的东西。然而,这样做是一种黑客行为。