从java正则表达式文件中获取所有手机号码
这是我正在使用正则表达式,但我无法得到手机号码是否在该行的开头。下面是我的文件,我现在正在获取输出 (我正在将所有mbile数字写入输出文件); 917205435005 但预计为78735534089170543505 输入:从java正则表达式文件中获取所有手机号码,java,regex,Java,Regex,这是我正在使用正则表达式,但我无法得到手机号码是否在该行的开头。下面是我的文件,我现在正在获取输出 (我正在将所有mbile数字写入输出文件); 917205435005 但预计为78735534089170543505 输入: 7873553408抽象类可能有一些可执行方法 方法没有实现。接口 不包含任何实现代码。摘要 类可以有非抽象的917205435005方法。 接口的所有方法1234都是抽象的 产量:917205435005 预计产量:7873553408、7873923408、9172
7873553408抽象类可能有一些可执行方法 方法没有实现。接口 不包含任何实现代码。摘要 类可以有非抽象的917205435005方法。 接口的所有方法1234都是抽象的 产量:917205435005 预计产量:7873553408、7873923408、917205435005
Pattern pattern = Pattern.compile("(0|91)?[7-9]\\d{9}(\\b|$)");
行首用插入符号表示:
FileReader fileReader = new FileReader("D://MyWork/Mobile.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
while (bufferedReader.read() != -1) {
String line = bufferedReader.readLine();
lineNum++;
Pattern pattern = Pattern.compile("^(0|91)?[7-9]\\d{9}(\\b|$)");
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
System.out.println("at line....:" + lineNum +
".....found....." + matcher.group() +
"...start..." + matcher.start() +
"..end..." + matcher.end());
}
要收集所有数字,需要进行
匹配器
和while循环
以获得所有匹配:
Pattern pattern = Pattern.compile("^(0|91)?[7-9]\\d{9}(\\b|$)");
- 我完全糊涂了。目前,您的问题有两个正则表达式:一个带锚(
^
)的正则表达式,另一个不带锚。您有两个预期输出的列表:一个有两个数字的列表,一个有三个数字的列表(其中一个没有出现在您的输入文件中)
但是,您的问题最可能的原因是:
String line;
while ((line = bufferedReader.readLine()) != null) {
bufferedReader.read()使用一个字符,这意味着它不会出现在后续调用bufferedReader.readLine()
返回的字符串中。也就是说,您阅读的行以873553408抽象类
(无前导'7'!)开头,您的正则表达式将不匹配
不要调用read()。通过BufferedReader返回的所有行进行循环的正确方法是检查readLine()是否返回null:
while (bufferedReader.read() != -1) {
你可以试试这个正则表达式
String line;
while ((line = bufferedReader.readLine()) != null) {
其中我假设您的国际代码是091
,国内电话号码格式是3位-3位-4位
,例如09133444555,091-333-444-5555,091333445555,33344455555,333-444-5555等等
这还不清楚,请详细分享您尝试的全部代码7873553408抽象类可能有一些未实现的可执行方法。接口不包含实现代码。抽象类可以有非抽象的917205435005方法。接口的所有方法1234都是抽象的。您的模式似乎有效,问题是什么请共享您使用的代码,没有任何帮助。我也尝试过插入符号,如果您使用,我得到的是空输出,这可能取决于您对模式的进一步操作。@John在第一时间尝试更改(请参见编辑)谢谢……是的woking@John因此,你可以考虑接受/投票支持有用的答案,以感谢那些为你花时间的人;)当然……还有信息:关于read()和readLine(),你是如何想到这一点的?@John另一个答案让我思考,所以我试着检查一下
String line;
while ((line = bufferedReader.readLine()) != null) {
\b(0?91)?(?:\s*-\s*|\s+)?(\d{3})(?:\s*-\s*|\s+)?(\d{3})(?:\s*-\s*|\s+)?(\d{4})\b