2009-11-30 16 views
29

मैं जो एक स्ट्रिंग में सभी खाली स्थान के से मेल खाता है जावा में एक नियमित अभिव्यक्ति के लिए देख रहा हूँ मैच के लिए। "\ s" केवल कुछ ही मेल खाता है, यह   और समान गैर-एसीआई व्हाइटसाइट्स से मेल नहीं खाता है। मैं एक नियमित अभिव्यक्ति की तलाश में हूं जो सभी (सामान्य) सफेद-स्पेस वर्णों से मेल खाता है जो जावा स्ट्रिंग में हो सकते हैं।जावा नियमित अभिव्यक्ति _all_ खाली स्थान के पात्रों

[संपादित करें]

स्पष्ट करने के लिए: मेरा मतलब नहीं है स्ट्रिंग अनुक्रम " " मैं sincle यूनिकोड चरित्र U + 00A0 है कि अक्सर " " का प्रतिनिधित्व करती मतलब है, उदाहरण के लिए एचटीएमएल में, और अन्य सभी यूनिकोड वर्णों को समान सफेद-स्पेस मेनिग के साथ, उदा। "नार्रो नो-BREAK स्पेस" (यू + 202 एफ), वर्ड योजक यूनिकोड 3.2 और ऊपर यू + 2060, "शून्य विथ नो-BREAK स्पेस" (यू + एफईएफएफ) और किसी अन्य चरित्र के रूप में एन्कोड किया गया जिसे सफेद- अंतरिक्ष।

[\p{Z}\s]

जवाब नीचे लेकिन जब से टिप्पणी में है:

[उत्तर]

मेरी pupose, यानी सब खाली स्थान के वर्ण, यूनिकोड + पारंपरिक पकड़ने के लिए, निम्न अभिव्यक्ति काम करता है यह थोड़ा छिपा हुआ है मैं इसे दोहराता हूं।

+2

स्पष्ट रूप से, आप क्या मतलब है ** सचमुच ** ''   या इसके उत्पादन '\ u00A0'? इससे काफी अंतर आता है। – BalusC

+0

  का आउटपुट? क्या आउटपुट? –

+1

@ विंको: उदाहरण के लिए वेबब्रोसर। – BalusC

उत्तर

11

  HTML में केवल रिक्त स्थान है। सादा पाठ निकालने के लिए HTML parser का उपयोग करें। और \s बस ठीक काम करना चाहिए।

+0

'  'अंत में' \ u00A0' उत्पन्न करता है। – BalusC

+0

@BalusC: हाँ, लेकिन यह महत्वपूर्ण है कि regex के संदर्भ में "खाली स्थान के चरित्र" के किसी भी समझदार परिभाषा केवल शामिल कर सकते हैं U + 00A0 है कि "अंत में" उत्पादन किया जाता है, लेकिन शाब्दिक शामिल नहीं कर सकते हैं "'   '"। विंकोस उत्तर के "आप यहां अमूर्त स्तरों को मिश्रित कर रहे हैं" यही है (अगर मैं इसे सही ढंग से समझता हूं)। –

+15

@ बालससी: एचटीएलएम पार्सर ने यह नहीं पता था। आप व्हाइटस्पेस से मेल खाने के लिए '\ p {Z}' के बजाय '\ p {Z} 'का उपयोग कर सकते हैं, यह' \ u00A0' – Andomar

35

& nbsp; एक whitespace चरित्र नहीं है, जहां तक ​​regexpes का संबंध है। आपको या तो उन स्ट्रिंग्स को शामिल करने के लिए regexp को संशोधित करने की आवश्यकता है, जैसे/(\ s | & nbsp; |% 20) /, या पहले ASCII या यूनिकोड डेटा का प्रतिनिधित्व करने के लिए स्ट्रिंग सामग्री को पार्स करें।

आप अमूर्त स्तरों यहाँ मिश्रण कर रहे हैं।

हैं, तो क्या के बाद सवाल का सावधानीपूर्वक को फिर से पढ़ें मामले प्रतीत हो रहा है, तो आप एक तरह से मानक ASCII की चर्चा करते हुए सभी खाली स्थान के पात्रों के साथ साथ खाली स्थान के कोड पॉइंट्स मैच के लिए के बाद कर रहे हैं, \p{Z} या \p{Zs} काम करेंगे।

आप वास्तव में अपने प्रश्न को स्पष्ट करना चाहिए क्योंकि यह लोगों को (यहां तक ​​कि कुछ downvotes के लिए सही जवाब बनाने) का एक बहुत गुमराह किया है।

+0

'\ p {javaWhitespace} '' & nbsp' (U + 00A0) से मेल नहीं खाता प्रतीत होता है। – Carsten

+11

इसके बजाय '\ p {Z}' या '\ p {Zs}' का उपयोग करें। मैंने जावा में इसका परीक्षण किया है, और वे यू + 00 ए 0 से मेल खाते हैं। –

+1

[\ p {Z} \ s] चाल चल रहा है! धन्यवाद! – Carsten

2

  सफेद स्थान नहीं है। यह एक वर्ण एन्कोडिंग अनुक्रम है जो HTML में व्हाइटस्पेस का प्रतिनिधित्व करता है। आप अपने स्ट्रिंग मैच को चलाने से पहले एचटीएमएल एन्कोडेड टेक्स्ट को सादा पाठ में कनवर्ट करना चाहते हैं। यदि ऐसा है, तो देखें javax.swing.text.html

+1

लॉल। ऐसा लगता है जैसे स्टैक ओवरफ़्लो आपके प्रारंभिक '  'शब्दशः लेता है। – Andomar

0

रेगेक्स वर्ण केवल एन्कोडिंग से स्वतंत्र हैं। यूनिकोड में - - यहाँ जो कुछ पात्रों की एक सूची है गैर मुद्रण कर रहे हैं:

How many non-printing characters are in common use?

11

आप सवाल रास्ता स्पष्ट रूप में मैं उम्मीद: आप वास्तव में शाब्दिक   के रूप में कई यहाँ स्ट्रिंग की तलाश नहीं कर रहे हैं ऐसा लगता है और जिसके लिए समाधान बहुत स्पष्ट है।

ठीक है, दुर्भाग्य से, regex का उपयोग करके मिलान करने का कोई तरीका नहीं है। पैटर्न में विशेष कोडपॉइंट्स को शामिल करना सबसे अच्छा है, उदाहरण के लिए: "[\\s\\xA0]"

संपादित के रूप में टिप्पणियों में से एक में पता चला, तो आप इस के लिए undocumented"\\p{Z}" इस्तेमाल कर सकते हैं। एलन, क्या आप टिप्पणी छोड़ सकते हैं कि आपने इसे कैसे पाया? यह काफी उपयोगी है।

+3

यह (कई) मानक यूनिकोड संपत्ति shorthands में से एक है। पैटर्न पैटर्न एपीआई दस्तावेज़ों में उनका उल्लेख है, हालांकि यह उदाहरणों में से एक नहीं है। यहां एक अच्छा अवलोकन है: http://www.regular-expressions.info/unicode.html#prop लेकिन यह उतना उपयोगी नहीं है जितना यह हो सकता है: यह लाइनफ़ीड्स, टैब या (स्पष्ट रूप से) किसी अन्य ASCII व्हाइटस्पेस से मेल नहीं खाता है अंतरिक्ष (यू +0020)। शायद यही कारण है कि आपने कभी इसके बारे में नहीं सुना। :) –

+0

सिंहावलोकन के लिए धन्यवाद। मैं वास्तव में उम्मीद नहीं करता था कि अनियंत्रित लोग जावा के रेगेक्स इंजन में भी काम करेंगे। इसका मतलब यह होगा कि एपीआई दस्तावेज़ अपूर्ण है (जिसे मैं वास्तव में सूर्य लोगों से उम्मीद नहीं करता, आपको पता है)। – BalusC

+0

परेशान है कि '\ x' मेल नहीं खाता है \ xA0' -______________________- – ThorSummoner

3

यहां सार मैं "खाली स्थान के" के कई प्रतिस्पर्धा परिभाषाओं से बना है:

http://spreadsheets.google.com/pub?key=pd8dAQyHbdewRsnE5x5GzKQ

आप स्पष्ट रूप से अतिरिक्त लोगों के बारे में आप में से एक से मिलान नहीं कर रहे हैं परवाह सूची होने अंत हो सकता है prefab वाले।

+0

गुवा पुस्तकालय इस सूची को" व्हाइटस्पेस "की कई परिभाषाओं की तुलना के रूप में संदर्भित करता है" ([स्रोत] (http: //docs.guava- पुस्तकालय .googlecode.com/Git/जावाडोक/com/गूगल/आम/आधार/CharMatcher.html # खाली स्थान के))। हालांकि, केविन, आपको अपने स्रोतों को देना चाहिए। साथ ही, मुझे आश्चर्य है कि "StreamTokenizer; String.trim()" कॉलम पर तारांकन चिह्न क्या है। और .. पहला चार सूचीबद्ध क्या है .. कुछ "(00-08)"? –

+1

लिंक मर चुका है। –

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