Java가 정규 표현식을 이용하여 데이터를 추출하는 방법
정규 표현식은 패턴 일치와 교체에 사용할 수 있는 규범이다. 정규 표현식은 일반적인 문자 (예를 들어 문자 a에서 z) 와 특수 문자 (메타문자) 로 구성된 문자 모드로 문자 주체를 찾을 때 일치할 문자열을 설명하는 데 사용된다.정규 표현식은 검색된 문자열과 일치하는 문자 모드를 템플릿으로 합니다.
Java는 정규 표현식을 사용하여 데이터 추출
자바 정규 표현식의 용도는 매우 넓다. 이전에 큰 3M의 txt 텍스트를 여러 개의 작은 텍스트로 나누어 C#로 쓰면 간결하고 코드도 스물 몇 줄인데 오늘 자바로 썼는데 과연 자바는 수다스럽다.
파일을 나누는 코드는 붙이지 않고 정규 표현식으로 큰 문자열을 그룹화하는 방법을 붙입니다.
예를 들면, 지금endlist가 하나 있다.txt 텍스트 파일, 내용은 다음과 같습니다.
1300102,
1300103,
1300104,
1300105,
1300106,
1300107,
1300108,
1300109,
1300110,
1300111,
1300112,
1300113,
1300114,
1300115,
1300116,
1300117,
1300118,
1300119,
7자리 숫자는 휴대전화 번호의 앞자리를 대표하고, 뒤의 한자는 번호의 귀속지를 나타낸다.지금 이 내용을 130, 131, 132...시작은 각각 130까지 썼다.txt 131.txt 132.txt.....이 파일들 중
public static void main(String args[]) {
File file = null;
BufferedReader br = null;
StringBuffer buffer = null;
String childPath = "src/endlist.txt";
String data = "";
try {
file = new File(childPath);
buffer = new StringBuffer();
InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "utf-8");
br = new BufferedReader(isr);
int s;
while ((s = br.read()) != -1) {
buffer.append((char) s);
}
data = buffer.toString();
} catch (Exception e) {
e.printStackTrace();
}
Map<String, ArrayList<String>> resultMap = new HashMap<String, ArrayList<String>>();
for (int i = 0; i < 10; i++) {
resultMap.put("13" + i, new ArrayList<String>());
}
Pattern pattern = Pattern.compile("(\\d{3})(\\d{4},[\u4e00-\u9fa5]*\
)");
Matcher matcher = pattern.matcher(data);
while (matcher.find()) {
resultMap.get(matcher.group(1)).add(matcher.group(2));
}
for (int i = 0; i < 10; i++) {
if (resultMap.get("13" + i).size() > 0) {
try {
File outFile = new File("src/13" + i + ".txt");
FileOutputStream outputStream = new FileOutputStream(outFile);
OutputStreamWriter writer = new OutputStreamWriter(outputStream, "utf-8");
ArrayList<String> tempList = resultMap.get("13" + i);
for (int j = 0; j < tempList.size(); j++) {
writer.append(resultMap.get("13" + i).get(j));
}
writer.close();
outputStream.close();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
24줄은 정규 표현식 "(\d{3}) (\d{4}, [\u4e00-\u9fa5]*\)"의 각 () 의 내용을 그룹으로 하고 색인은 1부터 시작하며 0은 전체 표현식을 나타냅니다.그래서 이 표현식은 두 조로 나뉘는데 첫 번째 조는 3개의 숫자를 나타내고 두 번째 조는 4개의 숫자에 여러 개의 한자를 더하고 줄 바꾸기를 한다.추출 시 26-28행과 같습니다.총결산
이상은 바로 이 글의 전체 내용입니다. 본고의 내용이 여러분의 학습이나 업무에 어느 정도 도움이 되고 의문이 있으면 댓글로 교류하시기 바랍니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.