df=pd.DataFrame({'dollar_sign':[['btc'],['btc'],['btc'],['nav'],['btc','btc','btc']],'followers_count':[35946,35946
,35946
,35946
,35946
]})
这是我正在使用正则表达式,但如果手机号码在行的开头,我就无法得到。这是我的文件我现在获得的输出是 (我正在将所有mbile数字写入输出文件); 917205435005 但预计是7873553408,917205435005
输入:
7873553408抽象类可能有一些可执行的方法 方法没有实现。接口 不包含任何实现代码。摘要 class可以有非抽象的917205435005方法。 界面的所有方法1234都是抽象的。
输出:917205435005
预期产量:7873553408,7873923408,917205435005
Pattern pattern = Pattern.compile("(0|91)?[7-9]\\d{9}(\\b|$)");
答案 0 :(得分:0)
该行的开头用插入符号表示:
Pattern pattern = Pattern.compile("^(0|91)?[7-9]\\d{9}(\\b|$)");
答案 1 :(得分:0)
要收集所有数字,您需要设置Matcher
和while-loop
来获取所有匹配项:
String str = "7873553408 Abstract classes may have some executable methods 7873923408 methods left unimplemented." +
" Interfaces contain no implementation code. An abstract class can have non abstract 917205435005 methods." +
" All methods 1234 of an interface are abstract.";
Pattern pattern = Pattern.compile("(0|91)?[7-9]\\d{9}");
Matcher m = pattern.matcher(str);
List<String> phones = new ArrayList<>();
while (m.find()) {
phones.add(m.group());
}
System.out.println(phones); //[7873553408, 7873923408, 917205435005]
^
,你只会在开始时获得一个)(\\b|$)
使用此代替消耗while (bufferedReader.read() != -1)
的{{1}}:
char
答案 2 :(得分:0)
我很困惑。目前,您的问题有两个正则表达式:一个带有锚点(^
),另一个没有。你有两个预期输出列表:一个包含两个数字的列表,一个包含三个数字的列表(其中一个没有出现在输入文件中)。
然而,问题的最可能原因是:
while (bufferedReader.read() != -1) {
bufferedReader.read()使用一个字符,这意味着它不会出现在后续bufferedReader.readLine()
调用返回的字符串中。这意味着,您阅读的行以873553408 Abstract classes
开头(没有前导'7'!),您的正则表达式将不匹配。
不要调用read()。循环遍历BufferedReader返回的所有行的正确方法是检查readLine()是否返回null:
String line;
while ((line = bufferedReader.readLine()) != null) {
答案 3 :(得分:0)
你可以试试这个正则表达式
\b(0?91)?(?:\s*-\s*|\s+)?(\d{3})(?:\s*-\s*|\s+)?(\d{3})(?:\s*-\s*|\s+)?(\d{4})\b
其中我认为您的国际代码为091
,国内电话号码格式为3 digits-3 digits-4 digits
,例如,091 333 444 5555,091 - 333 - 444 - 5555,0913334445555,333 444 5555 ,333 - 444 - 5555等...