我有几个粗略形式的字符串:
[some text] [some number] [some more text]
我想使用Java Regex类提取[一些数字]中的文本。
我大概知道我想使用什么正则表达式(尽管欢迎所有建议)。我真正感兴趣的是Java调用,以获取正则表达式字符串并在源数据上使用它来产生[某个数字]的值。
编辑:我应该补充一点,我只对单个[某些数字]感兴趣(基本上是第一个实例)。源字符串很短,我不打算寻找[一些数字]的多次出现。
我有几个粗略形式的字符串:
[some text] [some number] [some more text]
我想使用Java Regex类提取[一些数字]中的文本。
我大概知道我想使用什么正则表达式(尽管欢迎所有建议)。我真正感兴趣的是Java调用,以获取正则表达式字符串并在源数据上使用它来产生[某个数字]的值。
编辑:我应该补充一点,我只对单个[某些数字]感兴趣(基本上是第一个实例)。源字符串很短,我不打算寻找[一些数字]的多次出现。
当前回答
如果你正在从文件中读取,那么这可以帮助你
try{
InputStream inputStream = (InputStream) mnpMainBean.getUploadedBulk().getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String line;
//Ref:03
while ((line = br.readLine()) != null) {
if (line.matches("[A-Z],\\d,(\\d*,){2}(\\s*\\d*\\|\\d*:)+")) {
String[] splitRecord = line.split(",");
//do something
}
else{
br.close();
//error
return;
}
}
br.close();
}
}
catch (IOException ioExpception){
logger.logDebug("Exception " + ioExpception.getStackTrace());
}
其他回答
如果你正在从文件中读取,那么这可以帮助你
try{
InputStream inputStream = (InputStream) mnpMainBean.getUploadedBulk().getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(inputStream));
String line;
//Ref:03
while ((line = br.readLine()) != null) {
if (line.matches("[A-Z],\\d,(\\d*,){2}(\\s*\\d*\\|\\d*:)+")) {
String[] splitRecord = line.split(",");
//do something
}
else{
br.close();
//error
return;
}
}
br.close();
}
}
catch (IOException ioExpception){
logger.logDebug("Exception " + ioExpception.getStackTrace());
}
除了Pattern之外,Java String类还有几个可以使用正则表达式的方法,在您的情况下,代码将是:
"ab123abc".replaceFirst("\\D*(\\d*).*", "$1")
其中\\D是非数字字符。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Regex1 {
public static void main(String[]args) {
Pattern p = Pattern.compile("\\d+");
Matcher m = p.matcher("hello1234goodboy789very2345");
while(m.find()) {
System.out.println(m.group());
}
}
}
输出:
1234
789
2345
有时你可以使用java.lang.String中提供的简单的.split("REGEXP")方法。例如:
String input = "first,second,third";
//To retrieve 'first'
input.split(",")[0]
//second
input.split(",")[1]
//third
input.split(",")[2]
试着这样做:
Pattern p = Pattern.compile("^.+(\\d+).+");
Matcher m = p.matcher("Testing123Testing");
if (m.find()) {
System.out.println(m.group(1));
}