java - replaceAll在已知边界之间的任何内容,包括换行符和多个选项卡

时间:2017-05-24 07:02:36

标签: java regex replaceall

我想要替换第一个图1中的突出显示部分(从:g开头,包括换行符和多个标签,以:结尾),其中包含突出显示的部分第二个数字2:o)。

之前: first figure

后: second figure 我尝试了replaceAll(":g.*?:", ":o")但由于换行和标签而无法正常工作,然后我尝试了类似replaceAll(":g.*?]\n\t\t\t:", ":o")的内容,但标签的数量可能会有所不同,因此我需要更换此突出显示部分中的所有标签。

try {
		
			  File fXmlFile = new File("/Users/eddy/1.xml");
			  DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
			  DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
			  Document doc = dBuilder.parse(fXmlFile);
			  
			  doc.getDocumentElement().normalize();
			  
			  System.out.println(doc.getElementsByTagName("feature_tree").item(0).getTextContent());

			  String fm = doc.getElementsByTagName("feature_tree").item(0).getTextContent();
			  
			  fm = fm.replaceAll(":g[^:]*:", ":o");
			  
			  System.out.println(fm);
			  
		  } catch (Exception e) {
				e.printStackTrace();
			    }
          
          
          
          
 :r DataMining(_r)
	:m InputData(_r_1)
		:m Attribute types(_r_1_35)
			:o Mixed attribute types(_r_1_141_151_157_158)
			:g _r_1_35_36(_r_1_35_36) [1,*] 
				: Discrete(_r_1_35_36_39)
					:g _r_1_35_36_39_41(_r_1_35_36_39_41) [1,*] 
						: Nominal(_r_1_35_36_39_41_43)
						: Ordinal(_r_1_35_36_39_41_44)
				: Numerical(_r_1_35_36_40)
					:g _r_1_35_36_40_45(_r_1_35_36_40_45) [1,*] 
						: Bounded(_r_1_35_36_40_45_46)
						: Unbounded(_r_1_35_36_40_45_47)
				: Text(_r_1_35_36_55)
				: Time(_r_1_35_36_58)
		:m Data properties(_r_1_141)
			:o Labeled data(_r_1_141_144)
				:o More than two classes(_r_1_141_144_154)
			:o Missing values present(_r_1_141_145)
			:o Independant attributes(_r_1_141_150)
			:o Standardized values(_r_1_141_155)
		:m Data Sets(_r_1_151)
			:g _r_11_35_36_40_45(_r_11_35_36_40_45) [1,*] 
				: Training set(_r_1_151_152)
					:m Number of instances(_r_1_151_152_168)
						:g _r_1_151_152_168_170(_r_1_151_152_168_170) [1,1] 
							: 1-50(_r_1_151_152_168_170_171)
							: 51-250(_r_11_151_152_168_170_172)
							: 251-1000(_r_12_151_152_168_170_172)
							: 1001-10000(_r_1_151_152_168_170_173)
							: 10001-100000(_r_1_151_152_168_170_174)
							: 100001-(_r_1_151_152_168_170_175)
				: Test set(_r_1_151_153)

1 个答案:

答案 0 :(得分:0)

我不认为正则表达式是正确的解决方案,但如果您的要求永远不会改变replaceAll(":g[^:]*:",":o")应该做的。

测试:

public static void main(String t[]) throws IOException {
    Path exampleFile = Paths.get(PATH_TO_YOUR_EXAMPLE_AS_TEXT);
    String dataAsString = new String(Files.readAllBytes(exampleFile));
    System.out.println(dataAsString);
    System.out.println(dataAsString.replaceAll(":g[^:]*:", ":o"));

}

打印:

:r DataMining(_r)
:m InputData(_r_1)
    :m Attribute types(_r_1_35)
        :o Mixed attribute types(_r_1_141_151_157_158)
        :g _r_1_35_36(_r_1_35_36) [1,*] 
            : Discrete(_r_1_35_36_39)
                :g _r_1_35_36_39_41(_r_1_35_36_39_41) [1,*] 
                    : Nominal(_r_1_35_36_39_41_43)
                    : Ordinal(_r_1_35_36_39_41_44)
            : Numerical(_r_1_35_36_40)
                :g _r_1_35_36_40_45(_r_1_35_36_40_45) [1,*] 
                    : Bounded(_r_1_35_36_40_45_46)
                    : Unbounded(_r_1_35_36_40_45_47)
            : Text(_r_1_35_36_55)
            : Time(_r_1_35_36_58)
    :m Data properties(_r_1_141)
        :o Labeled data(_r_1_141_144)
            :o More than two classes(_r_1_141_144_154)
        :o Missing values present(_r_1_141_145)
        :o Independant attributes(_r_1_141_150)
        :o Standardized values(_r_1_141_155)
    :m Data Sets(_r_1_151)
        :g _r_11_35_36_40_45(_r_11_35_36_40_45) [1,*] 
            : Training set(_r_1_151_152)
                :m Number of instances(_r_1_151_152_168)
                    :g _r_1_151_152_168_170(_r_1_151_152_168_170) [1,1] 
                        : 1-50(_r_1_151_152_168_170_171)
                        : 51-250(_r_11_151_152_168_170_172)
                        : 251-1000(_r_12_151_152_168_170_172)
                        : 1001-10000(_r_1_151_152_168_170_173)
                        : 10001-100000(_r_1_151_152_168_170_174)
                        : 100001-(_r_1_151_152_168_170_175)
            : Test set(_r_1_151_153)
:r DataMining(_r)
:m InputData(_r_1)
    :m Attribute types(_r_1_35)
        :o Mixed attribute types(_r_1_141_151_157_158)
        :o Discrete(_r_1_35_36_39)
                :o Nominal(_r_1_35_36_39_41_43)
                    : Ordinal(_r_1_35_36_39_41_44)
            : Numerical(_r_1_35_36_40)
                :o Bounded(_r_1_35_36_40_45_46)
                    : Unbounded(_r_1_35_36_40_45_47)
            : Text(_r_1_35_36_55)
            : Time(_r_1_35_36_58)
    :m Data properties(_r_1_141)
        :o Labeled data(_r_1_141_144)
            :o More than two classes(_r_1_141_144_154)
        :o Missing values present(_r_1_141_145)
        :o Independant attributes(_r_1_141_150)
        :o Standardized values(_r_1_141_155)
    :m Data Sets(_r_1_151)
        :o Training set(_r_1_151_152)
                :m Number of instances(_r_1_151_152_168)
                    :o 1-50(_r_1_151_152_168_170_171)
                        : 51-250(_r_11_151_152_168_170_172)
                        : 251-1000(_r_12_151_152_168_170_172)
                        : 1001-10000(_r_1_151_152_168_170_173)
                        : 10001-100000(_r_1_151_152_168_170_174)
                        : 100001-(_r_1_151_152_168_170_175)
            : Test set(_r_1_151_153)