2011-02-24 5 views
5

내 텍스트 파일에 "&#38"모든 "&"문자를 교체해야하지만, HTML 코드 등하지자바/구문 분석 : 대체 및 기호가 아니라 HTML 코드는

& 또는 " 난하는 방법 현재 사용하고 있습니다 row = row.replace("& ", "&#38");

그러나 내가 말했듯이 html 코드는 " 저는 이것을 원하지 않습니다 .. 감사합니다.

ps. 내가 예를 들어, 당신은 정규식을 시도 할 수와 같은 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]+;)", "&"); 

정규식은 & 그것이 이 다음에하지의 주어진 교체 a sequence of '#a-zA-Z0-9' ending with ';'

+0

죄송합니다, 내 질문에 오류가 발생했습니다. html 코드는 & 뒤에 #가 없지만 a로 끝나는 문자가 거의 없습니다 (다른 길이). – aneuryzm

+0

좋아, 내가 질문에 정규식을 업데이 트했습니다. –

+0

'ō'문자열 형식에서는 정규식이 작동하지 않습니다. 당신이 필요로하는 것은'row.replaceAll ("& (?! [# a-zA-Z0-9] +;)", "&"),' – adarshr

0

공백에 패턴 식별자가 있으므로 패턴 "& ""&\\s"이어야합니다.

그래서 선은 row = row.replace("&\\s", "&#38");

+0

나는 방금 포스트 스크립트를 알아 차렸으므로'M & M'에서'&'를 붙이지 않을 것입니다. – MattLBeck

0

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

이는 #\d+; (해시, 숫자, 세미콜론) 다음되지 않습니다 앰퍼샌드 또는 \p{L}+; (문자, 세미콜론)을 대체 할 시도 읽어야합니다.

1

텍스트에

& 

같은 일이있을 수 있기 때문에 더 일반적인 솔루션은

& 
로 표현되어야한다 &을 말하는 잘못된 방법을 하나의 앰퍼샌드 중 하나를 의미하거나 할 수있다, 없다

그러나 HTML을 이스케이프하지 않는 한 후자는 거의 불가능합니다.

그래서 Btw는

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

뭔가를하려고합니다., &#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&MElla & David과 같은 문구 다음 문구 M&MElla & David

이 마지막 단계는 초기 HTML 텍스트 및 교체에 다시 가고 오른쪽에 지도의 LHS상의 문자열과 RHS의 문자열.

편집 : 당연히 원하는 HTML 파서를 사용할 수 있습니다. 얼마나 쉽게 HTML을 사용하는지 간단하게 보여주고 싶습니다.