2012-12-17 23 views
3

我有一個可以被解讀爲一個文本框中鍵入文件的表情,我想只得到數據後可用經常用於獲取特定數據

開始=「N =和結束=」 N =

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 1.0//EN" "SMIL10.dtd"> 
<head> 
</head> 
    <body> 
      <audio start="n=10.815s" end="n=19.914s"/> 
</body> 
</xml> 

我試着做以下幾點:

String startTime = readString.replaceAll(".*start=\"n=|\\s.*", "").trim(); 
    String endTime = readString.replaceAll(".*end=\"n=|\\s.*", "").trim(); 
    Log.e("Start Time is :" , startTime); 
    Log.e("endTime Time is :" , endTime); 

它的工作正常,剛剛獲得開始時間和結束時間,但它也顯示<?xml標記。

我該如何解決這個問題?

+1

使用合適的工具進行正確的工作。所以這裏的XML/HTML解析器會派上用場,而不是正則表達式。 – jlordo

+0

謝謝。它不是一個xml文件,它是一個帶有標籤的文本文件。我可以在文本框中查看它。 – Aadi

回答

2

請在下面找到解決方案在Java中,這適用於包含字符串的任何數據

<audio start="n=........" end="n=......." /> 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Test { 
public static void main(String[] args) 
{ 
String inputData1 = "<?xml version=\"1.0\" encoding=\"utf-8\"?>"+ 
         "<!DOCTYPE smil PUBLIC \"-//W3C//DTD SMIL 1.0//EN\" \"SMIL10.dtd\">" 
         + "<head>" 
         + "</head>" 
         + "<body>" 
         + "<audio start=\"n=10.815s\" end=\"n=19.914s\"/>" 
         + "<sometag> <audio start=\"n=10.815s\" end=\"n=20.914s\"/> </sometag>" 
         + "</body>" 
         + "</xml>"; 

    String inputData2 = "some data goes here with or without tags; <audio start=\"n=10.815s\" end=\"n=20.914s\"/>; askjdhfla "; 

    Pattern pattern = Pattern.compile("<audio[^>]*start\\s*=\\s*\"n\\s*=\\s*([^\"]*)\"[^>]*end=\"n\\s*=\\s*([^\"]*)\"[^>]*>"); 
    Matcher matcher = pattern.matcher(inputData1); 

    while(matcher.find()){ 
     System.out.println("start=\"n="+matcher.group(1)+", & end=\"n="+matcher.group(2)+""); 
    } 

} 
} 

Output For InputData1: 
start="n=10.815s, & end="n=19.914s 
start="n=10.815s, & end="n=20.914s 


Output For InputData2: 
start="n=10.815s, & end="n=20.914s 
3

我寧願使用XML解析器來讀取它。正則表達式不適合解析XML/HTML等。您可以在SO relating to this中找到大量參考文獻。

對於Java,DOM和SAX是可能的,但JDOM可能會使起點更容易。

+0

謝謝。它不是一個xml文件,它是一個帶有標籤的文本文件。我可以在文本框中查看它。 – Aadi

+0

它看起來像一個XML文件。爲什麼它不符合? –

1

我加入到以前的答案。但是如果你的文件總是很小,只需要很少的字符串,你可以使用Regexp。 在這種情況下,請試試這種模式:(\n|\r|.)*end\s*=\s*\"n=(.*)\"(\n|\r|.)*"

UPD:組#2會給你完全你想要的。

1

它總是通過解析器解析xml/html的最佳方式,而不是正則表達式。但是關於你的問題。你可以嘗試以下操作:

String s = "foo\n <audio start=\"n=10.815s\" end=\"n=19.914s\"/>bar\n"; 
String re = "(?s).*?(?<=start=\"n=)([^\"]*).*"; 
String startTime=s.replaceAll(re, "$1"); 

上面的例子會給10.815s爲String startTime。如果你想結束時間,更換重新(開始)和(結束)

簡短說明有關正則表達式:

(?s) is flag dotall, which means, the regex will match new lines as well 
(?<=start=\"n=)([^\"]*) this is look behind. 
         search for text following start="n= 
         and not "(double quote) in this case is 10.815s 

希望它有助於