2013-04-10 47 views
0

我的文本文件有很多行這樣的:Reg ex需要找到兩個||

12345|any string |5585|more string|yet more string|safdowdjfpd|wdfiojeif 

我想找到有此一行代碼之前空值:

12345|any string|5585||yet more string|safdowdjfpd|wdfiojeif 

還有其他行的文件有空字符串,所以它只能是被捕獲的第三和第四個管道符號。

+1

[標籤:正則表達式] - 「請還包括標籤指定編程語言或工具,你使用「。 – Dukeling 2013-04-10 10:54:51

回答

1

這包含連續管匹配任何字符串,這些是字符串的第3和第4個管道:

^[^|]+\|[^|]+\|[^|]+\|\|

匹配:

12345|any string|5585||yet more string|safdowdjfpd|wdfiojeif

不匹配:

12|345|any string|5585||yet more string|safdowdjfpd|wdfiojeif 
12345|any string|5585|yet more string|safdowdjfpd|wdfiojeif 
1

一個非常簡單的字符串匹配:

/\|\|..\|/ 

這符合||隨後是任意兩個字符並以|結尾

+0

好的,謝謝代碼不總是代碼它是兩個字符的任何組合,更新的問題 – NimChimpsky 2013-04-10 10:53:13

+0

這不是從你的問題顯而易見,但我已更新回答匹配您的評論。 – 2013-04-10 10:54:54

0

到目前爲止您嘗試過哪些模式?其中有\\|{2}

1

嘗試此

/.*\|.*\|.*\|\|.*/ 

與egrep的

[[email protected] test]# echo "12345|any string|5585|annoying string|CODE|safdowdjfpd|wdfiojeif" | egrep -o ".*\|.*\|.*\|\|.*" 
[[email protected] test]# 

[[email protected] test]# echo "12345|any string|5585||CODE|safdowdjfpd|wdfiojeif" | egrep -o ".*\|.*\|.*\|\|.*" 
12345|any string|5585||CODE|safdowdjfpd|wdfiojeif 
[[email protected] test]# 
0

測試計數的[任何字符]在該位置的數目:

/.+\|.+\|.+{0}\|.+\|.+\|.+\|.+/