Pyparsing에는 기본적인 함수들 이외에 많은 함수들이 있다.

활용하면 더 다양한 구문들을 파싱할 수 있다.

그 중 몇가지 함수를 설명 하겠다.




White()


'\n', space 바 등 공백을 파싱하고 싶을 때 사용한다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pyparsing import Word, alphas, nums, White
text = '''
if(banana() == 0)
{
    apple()
}
'''
 
ident = Word(alphas + "_")
ident_2 = Word(nums)
 
parsing = White() + ident("func")
 
for fn,s,e in parsing.scanString(text):
    print(fn.func)
cs


결과

if
apple





LineStart()


만약 줄 바뀌자마자 바로 오는 단어만 파싱하고 싶을 때 사용 한다.


예제 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from pyparsing import Word, alphas, nums, White, LineStart
text = '''
if(banana() == 0)
{
    apple()
}
Orange()
'''
 
ident = Word(alphas + "_")
ident_2 = Word(nums)
 
parsing = LineStart() + ident("func")
 
for fn,s,e in parsing.scanString(text):
    print(fn.func)
cs

결과

if
Orange





Optional()


파싱 하고 싶은 구문의 구성 요소가 가변적일때 사용하면 된다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pyparsing import Word, alphas, nums, White, LineStart
text = '''
banana is sweet
apple is very sweet
carrot is bitter
'''
 
ident = Word(alphas + "_")
ident_2 = Word(nums)
 
parsing = ident("name"+ Keyword("is"+ Optional("very"+ ident("taste")
 
for fn,s,e in parsing.scanString(text):
    print(fn.name, " : ", fn.taste)
cs


결과

banana  :  sweet
apple  :  sweet
carrot  :  bitter





SkipTo()


원하는 단어 이전의 문자열 까지 스킵한다. 말은 스킵이지만 지나치는건 아니고 원하는 단어나 구문이 나오기 전까지의 문자열을 하나의 리스트에 저장한다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pyparsing import Word, alphas, nums, SkipTo, Keyword
text = '''
if(banana is sweet)
{
    apple is very sweet
    carrot is bitter
}
'''
 
ident = Word(alphas + "_")
ident_2 = Word(nums)
 
parsing = Keyword("if"+ "("+ SkipTo("carrot"+ ident("name"+ Keyword("is")  + Optional("very"+ ident("taste")
 
for fn,s,e in parsing.scanString(text):
    print(fn.name, " : ", fn.taste)
cs


결과

carrot : bitter



* text의 밑줄 친 부분이 SkipTo()함수로 파싱되었다.

1
2
3
4
5
6
7
8
9
10
 '''
if(banana is sweet)
{
    apple is very sweet
    carrot is bitter
}
'''
 
cs





ignore()


파싱 하지 않을 요소를 정의해 파싱하지 않고 무시한다.


예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from pyparsing import Word, alphas, nums, White, LineStart
text = '''
banana is sweet
apple is very sweet // apple is very delicious
carrot is bitter
'''
 
ident = Word(alphas + "_")
ident_2 = Word(nums)
 
parsing = ident("name"+ Keyword("is"+ Optional("very"+ ident("taste")
parsing.ignore("//" + SkipTo("\n"))
 
for fn,s,e in parsing.scanString(text):
    print(fn.name, " : ", fn.taste)
cs


결과

banana : sweet apple : sweet carrot : bitter


+ Recent posts