2009-09-26 19 views
8

से कम सभी शब्दों को हटाने के लिए, ठीक है, मैं जावा में एक regexp की तलाश में हूं जो सभी शब्दों को 3 वर्णों से कम हटा देता है। मैंने सोचा कि \s\w{1,2}\s जैसे कुछ सभी 1 और 2 अक्षर शब्द (एक सफेद स्थान, एक से दो शब्द वर्ण और एक अन्य सफेद जगह) ले लेंगे, लेकिन यह काम नहीं करता है। मैं कहाँ गलत हूँ?नियमित अभिव्यक्ति n

+0

एक शब्द में 3 से कम शब्द, या एक समय में एक शब्द में सभी शब्द? –

+0

एक ही मार्ग पर सभी शब्द, मुझे बस उनकी आवश्यकता नहीं है। – janesconference

उत्तर

11

मुझे यह काफी अच्छा काम मिल गया है, लेकिन इसमें दो पास हुए।

public static void main(String[] args) { 
    String passage = "Well, I'm looking for a regexp in Java that deletes all words shorter than 3 characters."; 
    System.out.println(passage); 

    passage = passage.replaceAll("\\b[\\w']{1,2}\\b", ""); 
    passage = passage.replaceAll("\\s{2,}", " "); 

    System.out.println(passage); 
} 

पहला पास एक ही स्थान के साथ तीन वर्णों से कम वाले सभी शब्दों को प्रतिस्थापित करता है। ध्यान दें कि मुझे चरित्र वर्ग में एस्ट्रोफ़े को समाप्त करने के लिए शामिल करना था क्योंकि "मैं हूं" शब्द मुझे इसके बिना परेशानी दे रहा था। आपको अपने पाठ में अन्य विशेष पात्र मिल सकते हैं जिन्हें आपको यहां शामिल करने की भी आवश्यकता है।

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

आउटपुट:

ठीक है, मैं जावा में एक regexp सभी शब्दों से कम 3 अक्षरों को हटा देता है कि के लिए देख रहा हूँ।

ठीक है, regexp जावा की तलाश है जो सभी शब्दों को वर्णों से छोटा हटा देता है।

+0

हाँ, यह बहुत अच्छी तरह से काम करता है। – janesconference

+0

FYI - यह "इसे विश्वास नहीं कर सकता" => "यह विश्वास कर सकते हैं" – krinker

1

कोशिश करें: \b\w{1,2}\b हालांकि आपको अभी भी डबल रिक्त स्थान से छुटकारा पाना होगा जो दिखाए जाएंगे।

3

आप सफेद स्थान को मिलान नहीं करना चाहते, तो आप

\b\w{1,2}\b 

उपयोग करने के लिए शब्द सीमाओं पाने के लिए चाहते हो सकता है।

यह जावा स्वाद का उपयोग कर रेगेक्सबड्डी में मेरे लिए काम कर रहा है; परीक्षण स्ट्रिंग

के लिए

यह प्रकाश डाला गया "है" और "एक" "कुत्ते एक बिल्ली मज़ा है।" इसी प्रकार एक लाइन की शुरुआत/अंत में शब्दों के लिए।

आप एक कोड नमूना पोस्ट करना चाहते हैं।

(और, जैसा कि GameFreak सिर्फ पोस्ट, आप अभी भी ऊपर डबल रिक्त स्थान के साथ समाप्त होगा।)

संपादित करें:

\b\w{1,2}\b\s? 

एक और विकल्प है। यह आंशिक रूप से स्पेस-स्ट्रिपिंग समस्या को ठीक करेगा, हालांकि स्ट्रिंग के अंत में शब्द या विराम चिह्न के बाद वाले शब्द अभी भी समस्याएं पैदा कर सकते हैं। उदाहरण के लिए, "एक कुत्ता मजेदार नहीं है?" "कुत्ता मज़ा" बन जाता है? किसी भी मामले में, आपको अभी भी पूंजीकरण के साथ समस्याएं हो रही हैं (कुत्ते को अब कुत्ता होना चाहिए)।

+0

डाउनवॉटिंग के दौरान कृपया एक टिप्पणी छोड़ दें। मैं इसे एक ही समय में लिख रहा था GameFreak ने अपना जवाब पोस्ट किया; मैंने बस इसे कॉपी नहीं किया था। – TrueWill

+0

मैंने आपको संशोधित किया। – janesconference

+0

धन्यवाद @janesconference! :) – TrueWill

1

आप इस तरह एक स्ट्रिंग है:

\w{3,} 

में परिणामी:

hello there my this is a short word 

इस regex से अधिक या लंबाई में 3 अक्षरों के बराबर स्ट्रिंग में सभी शब्दों से मेल खाएगा

hello there this short word 

कि, मेरे लिए, सबसे आसान तरीका है। आप जो चाहते हैं उससे मेल खाने का प्रयास क्यों करें, जब आप उससे मिलान कर सकते हैं जो आप बहुत आसान चाहते हैं? कोई डबल रिक्त स्थान, कोई बचे हुए नहीं, और विराम चिह्न आपके नियंत्रण में है। अन्य दृष्टिकोण कई रिक्त स्थान पर तोड़ते हैं और बहुत मजबूत नहीं होते हैं।

+0

यह एक अच्छा विचार प्रतीत होता है, लेकिन मैं वर्तमान में जीडब्ल्यूटी का उपयोग कर रहा हूं और केवल स्ट्रिंग क्लास रेगेक्स विधियों का उपयोग कर रहा हूं। तो मैं अपनी स्ट्रिंग को विभाजित कर सकता हूं या अपने regexps को प्रतिस्थापित कर सकता हूं, लेकिन मुझे नहीं पता कि मैं केवल उन चीज़ों को कैसे प्राप्त करूं :( – janesconference

संबंधित मुद्दे