我有一個字符串x
,看起來像這樣。前面帶加號的行是彩色編碼的。RegEx,只顯示彩色線條(從git diff輸出)
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);
}
和
@TestMetadata("longLiteral.kt")
public void testLongLiteral() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/longLiteral.kt");
doTest(fileName);
}
原始git diff的輸出是這樣的(你也可以看到顏色代碼):
'\x1b[1mdiff --git js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java\x1b[m\n\x1b[1mindex 55597bf..9115830 100644\x1b[m\n\x1b[1m--- js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java\x1b[m\n\x1b[1m+++ js/js.tests/test/org/jetbrains/kotlin/js/test/JsLineNumberTestGenerated.java\x1b[m\n\x1b[[email protected]@ -38,0 +39,6 @@\x1b[m \x1b[mpublic class JsLineNumberTestGenerated extends AbstractJsLineNumberTest {\x1b[m\n\x1b[32m+\x1b[m\x1b[32m @TestMetadata("chainedCall.kt")\x1b[m\n\x1b[32m+\x1b[m\x1b[32m public void testChainedCall() throws Exception {\x1b[m\n\x1b[32m+\x1b[m\x1b[32m String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/chainedCall.kt");\x1b[m\n\x1b[32m+\x1b[m\x1b[32m doTest(fileName);\x1b[m\n\x1b[32m+\x1b[m\x1b[32m }\x1b[m\n\x1b[32m+\x1b[m\n\x1b[[email protected]@ -92,0 +99,6 @@\x1b[m \x1b[mpublic class JsLineNumberTestGenerated extends AbstractJsLineNumberTest {\x1b[m\n\x1b[32m+\x1b[m\x1b[32m @TestMetadata("longLiteral.kt")\x1b[m\n\x1b[32m+\x1b[m\x1b[32m public void testLongLiteral() throws Exception {\x1b[m\n\x1b[32m+\x1b[m\x1b[32m String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/lineNumbers/longLiteral.kt");\x1b[m\n\x1b[32m+\x1b[m\x1b[32m doTest(fileName);\x1b[m\n\x1b[32m+\x1b[m\x1b[32m }\x1b[m\n\x1b[32m+\x1b[m'
There我發現了一個正則表達式實際上可以匹配的綠顏色,但我與它應用於我的具體問題的問題:
/^\e\[32m\+\e\[m\e\[32m(.*)\e\[m$/
您是否考慮grep以'+'開頭的行呢?關鍵是在處理unix命令的ASCII輸出時不鼓勵顏色;他們只在屏幕上有意義。很多程序在注意到其輸出被傳遞到另一個命令後立即停止生成顏色代碼。 – Alfe
鏈接問題中的接受答案適用於顏色代碼,因爲可能有其他的行在前面有加號。另外我使用GitPython在Python中工作,所以沒有可用的grep。 – ScientiaEtVeritas
我並不是指Unix命令'grep',而是指grepping(* g * etting與* re * gular ex * p * ression相匹配的東西)的行爲。 – Alfe