2010-12-14 20 views
5

के साथ सड़क के नामों को ठीक करना मुझे एक रेगेक्स समस्या हल करना है जो विशिष्ट हो सकता है, स्टैक ओवरफ़्लो के माध्यम से देखकर मैंने कुछ अच्छी खोज की है, लेकिन इसे काम करने के लिए उन्हें एक साथ टुकड़ा करने में सक्षम नहीं हैं।रेगेक्स

मूल रूप से मैं यह चाहता हूँ:

lorem ipsum north road =>lorem ipsum rd (n)

north lorem ipsum rd =>lorem ipsum rd (n)

lorem ipsum road north =>lorem ipsum rd (n)

एक ऑटो पूरा कार्यक्रम के हिस्से के रूप में मैं आंशिक लेख बदलने की आवश्यकता सही संस्करण में ताकि यह डेटाबेस

देख सके

lorem ipsum south वां =>lorem ipsum rd (s)

west lorem ipsum roa =>lorem ipsum rd (w)

मैं किसी को मेरे लिए इस कार्यक्रम कोड करने के लिए नहीं करना चाहते हैं, लेकिन मैं सबसे अच्छा जानना चाहते हैं समस्या से निपटने का तरीका।

अब तुम मुझे पूछ सकते हैं कि मैं क्यों परेशान, के रूप में लोगों को इस तरह के ऊपर f'd व्याकरण के साथ नहीं लिख सकता है, लेकिन है कि क्योंकि मैं केवल अंग्रेजी के साथ नहीं काम कर रहा हूँ :(

चीयर्स

+4

यह एक बड़ी चुनौती है। मैंने पहले एक रेगेक्स बनाया है जिसमें सड़क के प्रकार (यानी "स्ट्रीट", "लेन", "एवेन्यू", "एवेन्यू" इत्यादि) पाए गए थे, लेकिन यहां तक ​​कि यह 200 से अधिक वर्णों का रेगेएक्स था। इसे हल करने के लिए उससे अधिक जटिल होगा। "नॉर्थ आरडी", "वेस्ट एवेन्यू" जैसे एज केस आदि इसे और भी चुनौतीपूर्ण बना देंगे। –

+1

मुझे लगता है कि यह एक तरह का सवाल है जिसे एक बड़े रेगेक्स के साथ हल नहीं किया जाना चाहिए। कार्य को छोटे चरणों में तोड़ना और अलग-अलग करना आसान होगा: उदा। उत्तर, एन ... आदि के लिए जाँच करें और अंत में एक "(एन)" जोड़ें; अन्य दिशाओं की जांच करें; "सड़क" के संक्षेपों की जांच करें ... आदि। यदि आप प्रत्येक को एक अलग चरण में करते हैं, तो संभवतः इसे आसानी से पालन करना और लिखना आसान हो जाएगा। –

+1

ओह, एक और विचार: यदि आप इसे चरणबद्ध तरीके से करते हैं, तो आपके पास अपने संशोधन को पूर्ववत करने का विकल्प होगा और फिर लुकअप को आजमाएं: यह संभव है कि कुछ सड़क में आपके द्वारा प्रतिस्थापित वास्तविक नाम में कुछ है। –

उत्तर

0

के लिए है अपने प्रश्न के पहले भाग के लिए, निम्न छद्म आप के बाद क्या कर रहे हैं की तरह regex नज़र कुछ?

(<direction>?) <road name> (<direction>?) <road type> (<direction>?) 

तो फिर तुम तीन वैकल्पिक <direction> regex से प्रत्येक के लिए जाँच करेगा, आप इसे देना चाहता हूँ जो कुछ भी हालत भी शामिल है। आप की आवश्यकता होगी डब्ल्यू आने के लिए <direction>, <road name>, और <road type> खुद को regex। उन regex शायद विशिष्ट होना चाहिए, उदा। (सड़क) | (तृतीय) | (सड़क) | (सेंट)।

सवाल के 2 भाग के लिए

(यानी स्वत: पूर्ण), आप सूचकांक करने के लिए कुछ या रेगुलर एक्सप्रेशन से ऊपर (यानी दिशा-निर्देश, सड़क के नाम, और सड़क प्रकार) का उल्लेख श्रेणियों के सभी निर्भर करता है कि आप कितना करना चाहते आवश्यकता हो सकती है, स्वत: पूर्ण।

3

मुझे लगता है कि सबसे मुश्किल बात रेगेक्स के साथ लाइन में उचित स्थान में उचित शब्दों को देखना है, इसलिए, हालांकि सुरुचिपूर्ण नहीं, क्या यह न्यूनतम regexp के साथ ऐसा करने के लिए एक और अधिक प्रबंधनीय तरीका हो सकता है? :

  1. निकालें सभी ज्ञात पता पंक्ति और, hopefuly, हम सड़क का नाम के साथ छोड़ दिया जाएगा, जो कि शब्द और उनकी विविधता (सड़क प्रकार, दिशा, संख्या, ...)।

  2. पता लाइन वापस लिखें, लेकिन में हमें जिस क्रम की आवश्यकता है (सड़क का नाम + सड़क प्रकार + दिशा)।

एक बार जब आप स्थिति से छुटकारा पाने, posible सैद्धांतिक रूपों अभी भी बड़ी हैं, लेकिन उम्मीद के मुताबिक रूपों है कि बड़े नहीं होना चाहिए, यहां तक ​​कि वर्तनी की गलतियां के लिए लेखांकन: एवेन्यू: Avenu, Avene, aveniu, AVN, एवी, एवीएन। सड़क: आरडी, राउड, रोड, राउड?

+0

इस तरह मैं इसे भी करूँगा। एक रेगेक्स नौकरी को सही तरीके से करने में सक्षम होने के लिए बहुत प्रारूपित होगा, क्योंकि उपयोगकर्ता * किसी * * में * कुछ भी * टाइप कर सकता है। सभी ज्ञात शब्दों (और संयोजन) को हटाकर और उन सभी परिवर्तनों का ट्रैक रखते हुए, आप उचित परिणाम प्राप्त कर सकते हैं। – Joost

+0

मैंने वीबी 6 में पहले एक ऐप के लिए ऐसा किया है जो हर दिन मेलिंग लेबल बनाता है। यह एक सफल दृष्टिकोण था, लेकिन आपको निश्चित रूप से उन सभी संयोजनों पर लेगवर्क करने की आवश्यकता है जिन्हें आप प्रतिस्थापित करना चाहते हैं। हर बार, मैं पागल पतों के साथ समस्याओं में भाग लेता हूं, इसलिए आपको नियमित रूप से नियमित पैटर्न में नहीं होने वाले पागल पतों के लिए चीजों पर नजर रखना होगा और नकारात्मक फ़िल्टर (स्पर्श करने के लिए तार) जोड़ना होगा। – zanlok