2012-03-20 9 views
16

का उपयोग करके प्रतिस्थापित किया गया है, मैं रेगेक्स के माध्यम से पढ़ रहा हूं और मैंने सोचा कि यह काम करेगा लेकिन यह काम नहीं करना प्रतीत होता है। मुझे बस इतना करना है कि यदि यह मौजूद है तो फ़ोन नंबर से अग्रणी 1 को स्ट्रिप करें।सरल ग्रोवी रेगेक्स

तो:

def mphone = 1+555-555-5555 
mphone.replace(/^1/, "") 

चाहिए इस उत्पादन नहीं + 555-555-5555?

+0

आपका मतलब था 'def mphone = "1 + 555-555-5555" '(उद्धरण के साथ) – Antoine

उत्तर

26

मैं आपके कोड में दो त्रुटियों को पहचानता हूं। सबसे पहले एक शायद कोई गलती है: आप उद्धरण चिह्नों के साथ फोन नंबर आसपास नहीं कर रहे हैं तो यह एक पूर्णांक है: 1 + 555 - 555 - 5555 = -5554

इसके अलावा

, आप स्ट्रिंग में replaceFirst का उपयोग करना चाहिए वहाँ के बाद से कोई विधि replace लेने पहले पैरामीटर के रूप में एक पैटर्न। यह काम करता है:

def mphone = "1+555-555-5555" 
mphone.replaceFirst(/^1/, "") 
+15

अच्छा उत्तर। एक चेतावनी, मत भूलना स्ट्रिंग्स अपरिवर्तनीय हैं। एमफोन को पुन: असाइन करना सुनिश्चित करें: 'mphone = mphone.replaceFirst (/^1 /, "")' –

+0

@ जोहाननाथ महान टिप्पणी, वापसी मूल्य के रूप में अंतिम पंक्ति का उपयोग करके किया जाएगा, लेकिन मुझे नहीं लगता था कि यह भी गलत हो सकता है * जगह में * प्रतिस्थापन – Esteban

+0

संपन्न @ChrLipp, मुझे बताने के लिए धन्यवाद! – Esteban

17

replace जावा के तार का एक जावा विधि है, जो दूसरे के साथ एक चरित्र की जगह है:

assert "1+555-551-5551".replace('1', ' ') == " +555-55 -555 " 

क्या आप replaceAll है के लिए देख रहे हैं, जो एक regex की सभी घटनाओं की जगह लेंगे, या replaceFirst, कि केवल पहली घटना की जगह लेंगे:

assert "1+555-551-5551".replaceAll(/1/, "") == "+555-55-555" 
assert "1+555-551-5551".replaceFirst(/1/, "") == "+555-551-5551" 

^ अपने regex में इसका मतलब है टी टोपी शुरुआत में होना चाहिए:

assert "1+555-551-5551".replaceAll(/^1/, "") == "+555-551-5551" 

इसलिए आपके द्वारा पोस्ट किया गया कोड लगभग सही था।