2011-02-24 7 views
5

मैं अपने पाठ फ़ाइल में "&#38" के साथ सभी "&" प्रतीकों को बदलने के लिए की जरूरत है लेकिन इस तरह के एचटीएमएल कोड नहीं & याजावा/पार्सिंग: कैसे को बदलने के लिए और प्रतीक नहीं बल्कि एचटीएमएल कोड

रूप " मैं वर्तमान में row = row.replace("& ", "&#38");

का उपयोग कर रहा है, लेकिन जैसा कि मैंने कहा है कि एचटीएमएल कोड बदल दिए गए हैं " और मुझे यह नहीं चाहिए .. धन्यवाद

ps। मैं क्योंकि मैं, आप एक regex की कोशिश कर सकते ऐसे M&M या Ella & David

+0

आपको भी अर्धविराम की आवश्यकता है। '&' या '&', न केवल '& # 38'। –

+0

संभावित डुप्लिकेट: http://stackoverflow.com/questions/240546/removing-html-from-a-java-string –

उत्तर

4

के रूप में इसे शब्दों में प्रतिस्थापित करने की आवश्यकता जैसे & के बाद रिक्त स्थान नहीं जोड़ सकते,

row = row.replaceAll("&(?![#a-zA-Z0-9]+;)", "&"); 

regex की जगह & दिया यह के बाद नहीं है कि a sequence of '#a-zA-Z0-9' ending with ';'

+0

क्षमा करें, मेरे प्रश्न में एक त्रुटि हुई। एचटीएमएल कोड के पास # के बाद नहीं है, लेकिन उनके पास कुछ अक्षर हैं (अलग-अलग लंबाई); – aneuryzm

+0

ठीक है, मैंने प्रश्न के लिए regex अद्यतन किया है। –

+0

आपका रेगेक्स 'ō' तारों के रूप में काम नहीं करता है। आपको शायद जो चाहिए वह 'row.replaceAll ("& (?! [# A-zA-Z0-9] +;)", "&"); – adarshr

0

पैटर्न "& ""&\\s" होना चाहिए, क्योंकि व्हाइटस्पेस में पैटर्न पहचानकर्ता भी है।

तो लाइन पढ़ना चाहिए row = row.replace("&\\s", "&#38");

+0

सिवाय इसके कि मैंने अभी आपकी पोस्टस्क्रिप्ट देखी है, इसलिए यह 'एम एंड एम' में '&' को नहीं पकड़ पाएगा – MattLBeck

0

String replacedAmpersands = row.replaceAll("&(?!(?:#\\d+|\\p{L}+);)", "&") 

यह केवल ऐम्परसेंड कि #\d+; (हैश, संख्या, अर्धविराम) द्वारा पालन नहीं कर रहे या \p{L}+; (पत्र, अर्धविराम) का स्थान ले लेगा का प्रयास करें।

1

कोई सामान्य समाधान या तो एक एम्परसेंड मतलब या हो सकता है जो

& 
के रूप में व्यक्त किया जाना चाहिए & कहने का एक विकृत तरह से, नहीं है अपने पाठ में के बाद से वहाँ की तरह

& 

बातें हो सकता है

हालांकि, उत्तरार्द्ध काफी असंभव है (जब तक कि आप कुछ HTML से बच रहे हों)।

तो जैसे

row = row.replaceAll("&(?!(?:\\#|amp|quot|nbsp|\\d+);)", "&"); 

Btw कुछ प्रयास करें।, &#38 अंतिम अर्धविराम याद आ रही है। ASCII कोड का उपयोग करने के लिए & पसंद करें।

0

यह समाधान अधिक शामिल है लेकिन मेरी भावना यह है कि यह पूर्णप्रवाह है, जबकि रेगेक्स समाधान 100% सही नहीं हो सकता है (प्रसिद्ध "do not use regex for HTML stackoverflow thread" के अनुसार)।

Jsoup का उपयोग करना:

public static String html2text(String html) { 
    return Jsoup.parse(html).text(); 
} 

यह यकीन है कि एक ही ऐम्परसेंड आप की जरूरत है, बाकी नहीं युक्त पाठ के लिए आप दे देंगे।

फिर एक मानचित्र बाएं हाथ की ओर पर युक्त बनाने M&M और Ella & David और जैसे वाक्यांशों तो दाहिने हाथ की ओर वाक्यांशों M&M और Ella & David

अंतिम चरण प्रारंभिक HTML पाठ और जगह के लिए वापस जा रहा है पर आरएचएस के साथ मानचित्र के एलएचएस पर तार।

संपादित करें: आप निश्चित रूप से किसी भी HTML पार्सर का उपयोग कर सकते हैं - बस आपको एक त्वरित उदाहरण देना चाहता था कि इसका उपयोग करना कितना आसान हो।

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