2013-01-04 32 views
3

我在計算如何檢查行是否包含短劃線(-)並捕獲其中的一部分時遇到了一些麻煩。想要檢查一個字符串是否包含 -

這裏是我可以有輸入字符串的例子:

abc,xyz,ijk-a,opq 

abc,xyz,ijk,opq 

我想破折號之前提取的部分,如果它的存在,即ijk。 如果沒有短劃線,我只想ijk(如第二個字符串所示)。

以下正則表達式在使用前瞻斷言的情況下使用並執行作業,但始終生成一個空組,如Regex code here所示。 我想只有一個捕獲組返回ijk

我認爲,正則表達式如果條件只會返回if或else條件的組,而不是兩者。

.*,(?(?=.*?-.*?)(.*?)-.*?|(.*?)), 

感謝

+0

看到另一個答案後,我意識到我需要澄清。逗號分隔的字符串全部在一行上,並且您可以始終在每個字符串之後有一個選項 - 什麼東西? – DWright

回答

0

試着這麼做'([^-]+)(-([^-]+))?' 你的字符串,然後用連字符與否,將是第一個捕獲小組。

+1

'-'是一個特殊字符。用'\\'將其跳過。 – Zaffy

+0

- 只在[]內是特殊的,只有當它不是[]內的最後一個字符時 – DWright

2

使用Perl風格的正則表達式:

/[^,]*,[^,]*,([^,-]*)/ 

例使用兩個給定的情況下:

perl -lane 'print $1 if /[^,]*,[^,]*,([^,-]*)/;' input 

輸出

ijk 
ijk 
相關問題