使用起始字符串和结束字符串从长字符串中提取子字符串?

我有这个长字符串(它是一个长的连续字符串):

Home address H.NO- 12 SECTOR- 12 GAUTAM BUDH NAGAR NOIDA- 121212, UTTAR PRADESH INDIA +911112121212 Last Updated: 12-JUN-12 Semester/Term-time Accommodation Type: Hall of residence (private provider) Semester/Term-time address A121A SOME APPARTMENT SOME LANE CITY COUNTY OX3 7FJ +91 1212121212 Last Updated: 12-SEP-12 Mobile Telephone Number : 01212121212

如果查看上面的字符串,可以生成以下模式:

last_updated_text>

我想提取这个字符串的特定部分,如: 1. H.NO- 12 SECTOR- 12 GAUTAM BUDH NAGAR NOIDA- 121212, UTTAR PRADESH INDIA 2. Hall of residence (private provider) 3. A121A SOME APARTMENT SOMELANE CITY COUNTY OX3 7FJ 4. 01212121212

这个信息是可变的,所以它因人而异,所以我不能只计算长度并使用子字符串来提取它,因为整个字符串的长度和我想要提取的部分是可变的。

如上所述,如何使用Java提取字符串的特定部分? 我一直在寻找方法很长一段时间但找不到方法。 任何帮助将非常感谢

根据您的(单个)示例,这对我有用。 学习将不情愿的修饰符用于正则表达式。 在这样的情况下,他们会帮助你很多。

例如,要获取与第一部分匹配的字符串: "Home address (.+?) \+\d+ Last Updated:此正则表达式不会跳过”Last Updated“字符串或”+ dd“(数字)我们不想要。正则表达式“(。+?)”是不情愿的(不是贪婪的),不会跳过+号或数字,让它们与表达式的其余部分匹配。

您可以使用它来匹配由静态文本包围的正则表达式中的子字符串。 在这里,我正在使用捕获组来查找我想要的文本。 (捕获组是括号中的部分。)

 class Goofy { public static void main( String[] args ) { final String input = "Home address H.NO- 12 SECTOR- 12 GAUTAM BUDH NAGAR " + "NOIDA- 121212, UTTAR PRADESH INDIA +911112121212 " + "Last Updated: 12-JUN-12 Semester/Term-time " + "Accommodation Type: Hall of residence (private " + "provider) Semester/Term-time address A121A SOME " + "APPARTMENT SOME LANE CITY COUNTY OX3 7FJ +91 " + "1212121212 Last Updated: 12-SEP-12 Mobile Telephone " + "Number : 01212121212"; final String regex = "Home address (.+?) \\+\\d+ Last Updated: " + "\\S+ Semester/Term-time Accommodation Type: (.+?) " + "Semester/Term-time address (.+?) \\+\\d\\d \\d+ " + "Last Updated.+ Number : (\\d+)"; Pattern pattern = Pattern.compile( regex ); Matcher matcher = pattern.matcher( input ); if( matcher.find() ) { System.out.println("Found: "+matcher.group() ); for( int i = 1; i <= matcher.groupCount(); i++ ) { System.out.println( " Match " + i + ": " + matcher.group( i )); } } } } 

利用http://www.tutorialspoint.com/java/java_regular_expressions.htm中的示例,我认为您将要使用正则表达式。 就像是:

 import java.util.regex.Matcher; import java.util.regex.Pattern; public class RegexMatches { public static void main( String args[] ){ // String to be scanned to find the pattern. String line = "Home address H.NO- 12 SECTOR- 12 GAUTAM BUDH NAGAR NOIDA- 121212, UTTAR PRADESH INDIA +911112121212 Last Updated: 12-JUN-12 Semester/Term-time Accommodation Type: Hall of residence (private provider) Semester/Term-time address A121A SOME APPARTMENT SOME LANE CITY COUNTY OX3 7FJ +91 1212121212 Last Updated: 12-SEP-12 Mobile Telephone Number : 01212121212"; String pattern = "Home address (.*) Last Updated:"; // Create a Pattern object Pattern r = Pattern.compile(pattern); // Now create matcher object. Matcher m = r.matcher(line); if (m.find( )) { System.out.println("Found value: " + m.group(0) ); } else { System.out.println("NO MATCH"); } } } 
 Home\s+address\s+(.*?)Last\s+Updated(.*?)Accommodation\s+Type(.*?)Semester\/Term-time(.*?)Last\s+Updated(.*)Mobile\s+Telephone\s+Number\s*:\s*(\d+) 

试试这个抓住了。看看演示。

http://regex101.com/r/jI8lV7/7