2009-09-01 78 views
0

我有一個像下面的字符串:正則表達式來找到一個詞在句子

CREATE GLOBAL TEMPORARY TABLE some_temp_table_name

CREATE GLOBAL TEMPORARY TABLE some_temp_table_name something else

與我想去掉無論是在粗體字母的正則表達式。

我有以下的正則表達式

([a-z].*[\s]*) 

我應該在正則表達式改變?

+0

你用什麼語言/框架來執行這個正則表達式? – 2009-09-01 03:37:55

+0

對不起,我正在使用groovy – Omnipresent 2009-09-01 03:40:07

回答

1

試試這個:

([A-Z\s]+)[a-z_]+\s?([a-z\s]+)

在Groovy中,你會做這樣的事情:

String clean 
    = yourString.replaceAll("([A-Z\s]+)[a-z_]+\s?([a-z\s]+)", "$1$2"); 
+0

謝謝。這樣可行。但不是第一句話,我希望取詞後沒有空格。會改變你的答案([a-z _] +)對於這個要求是否正確? – Omnipresent 2009-09-01 03:33:16

+0

我的錯誤 - 我最初的回答是錯誤的。請參閱我的更新。 – 2009-09-01 03:36:27

+0

你的新正則表達式選擇整個字符串。而不僅僅是我希望的字詞。 – Omnipresent 2009-09-01 03:39:30

0

試試? :

([a-zA-Z\s]+TABLE)\s\b[a-zA-Z_]+\b(.*) 
+0

不幸的是,這似乎並不奏效。 – 2009-09-01 03:37:21

0

如果我的目標是提取lowcase部分我會做的紅寶石以下:

'CREATE GLOBAL TEMPORARY TABLE some_temp_table_name '.gsub(/[A-Z]/,'').gsub(/[\s]{2,}/, ' ').strip 
1

根據您所提供的2例,下面應在Groovy工作:

def s1 = "CREATE GLOBAL TEMPORARY TABLE some_temp_table_name" 
def s2 = "CREATE GLOBAL TEMPORARY TABLE some_temp_table_name something else" 

def t1 = s1 =~ /CREATE GLOBAL TEMPORARY TABLE (\w+)/ 
def t2 = s2 =~ /CREATE GLOBAL TEMPORARY TABLE (\w+)/ 

assert "some_temp_table_name" == t1[0][1] 
assert "some_temp_table_name" == t2[0][1]