차트 ruby-appeendix-V(rubular)
정규 표현식 regular expression
텍스트 정보를 검색하는 데 편리한 도구는 정규 표현식입니다. 기억하고 싶어서 좌절한 적이 있습니까?나는 10년 이상 RegExp를 쓰지 못하고 여러 권의 책을 시도하다가 중도에 포기했다. 하지만 http://rubular.com 겨우 10분 만에 사용할 수 있었다. 비결은 역시 TDD였다.
rubular
트레일러 화면
Rublar 화면을 보십시오. 맨 위에 정규 표현식을 넣으십시오. 왼쪽 아래에 테스트 string을 넣으십시오. 이렇게 하면 오른쪽에서 결과를 추출할 수 있습니다.
우선 테스트 문자열로line = '* fix calc kpoints:50, in_plane:0.98, vertical:1.00'
문제를 사고하다.
지금부터 수치의 배열 [0.981.00]을 꺼냅니다. 우선 꺼낸 문자열은(.+)
'.'등, 1개 이상의 표시(+)를 넣었습니다. 앞으로 여분의 문자를 없애는 것을 고려해 보십시오. 조금만 시도해 보시면,: in_plane:(.+), vertical:(.+)
왜 수치만 나오지?
일반적으로 정규적 표현은 많은 것을 기억해야 한다고 생각하지만, Regex quick reference에서 정리한 요소로만 구성되어 있다. 대체적으로 분류하면,
트레일러 화면
Rublar 화면을 보십시오. 맨 위에 정규 표현식을 넣으십시오. 왼쪽 아래에 테스트 string을 넣으십시오. 이렇게 하면 오른쪽에서 결과를 추출할 수 있습니다.
우선 테스트 문자열로
line = '* fix calc kpoints:50, in_plane:0.98, vertical:1.00'
문제를 사고하다.지금부터 수치의 배열 [0.981.00]을 꺼냅니다. 우선 꺼낸 문자열은
(.+)
'.'등, 1개 이상의 표시(+)를 넣었습니다. 앞으로 여분의 문자를 없애는 것을 고려해 보십시오. 조금만 시도해 보시면,: in_plane:(.+), vertical:(.+)
왜 수치만 나오지? 일반적으로 정규적 표현은 많은 것을 기억해야 한다고 생각하지만, Regex quick reference에서 정리한 요소로만 구성되어 있다. 대체적으로 분류하면,
이용 방법
루피에 합병하려면,line = "* fix calc kpoints:50, in_plane:0.98, vertical:1.00"
string = Regexp.new("\\* fix calc kpoints:50, in_plane:(.+), vertical:(.+)")
line =~ string
p [$1.to_f, $2.to_f] #=> [0.98, 1.00]
res = line.scan(string)
p res #=> [["0.98", "1.00"]]
p res[0].map(&:to_f) #=> [0.98, 1.0]
p m = line.match(string)
#=> #<MatchData "* fix calc kpoints:50, in_plane:0.98, vertical:1.00" 1:"0.98" 2:"1.00">
p [m[1].to_f, m[2].to_f] #=> [0.98, 1.0]
등등, 각각의 특징이 있지만 어떤 것을 써도 순조롭게 진행될 때 순조롭게 진행될 수 있다.
관련regexp
게다가 최근 눈에 띄는 수법으로 패치도 했다.string = Regexp.new('in_plane:(?<x>.+), vertical:(?<y>.+)')
res = line.match(string)
=> #<MatchData "in_plane:0.98, vertical:1.00" x:"0.98" y:"1.00">
irb(main): > res[:x]
=> "0.98"
irb(main): > res[:y]
=> "1.00"
:x
또는 :y
symbol로 찾을 수 있습니다.
"=~"이면irb(main):001:0> line = '* fix calc kpoints:50, in_plane:0.98, vertical:1.00'
=> "* fix calc kpoints:50, in_plane:0.98, vertical:1.00"
irb(main):003:0> /in_plane:(?<x>.+), vertical:(?<y>.+)/ =~ line
=> 23
irb(main):004:0> x
=> "0.98"
irb(main):005:0> y
=> "1.00"
해당 이름의 로컬 변수입니다.
저기, 수치를 뽑을 때scanf("%i,%f")도 편리해요.p line.scanf("* fix calc kpoints:50, in_plane:%f, vertical:%f")
#=>[0.98, 1.0]
C 언어와 같은format.regexp로 꺼내면 문자열, tof 또는 toi로 flat, int로 변환해야 하며,scanf로 꺼낸 후 type으로 꺼냅니다.
line = "* fix calc kpoints:50, in_plane:0.98, vertical:1.00"
string = Regexp.new("\\* fix calc kpoints:50, in_plane:(.+), vertical:(.+)")
line =~ string
p [$1.to_f, $2.to_f] #=> [0.98, 1.00]
res = line.scan(string)
p res #=> [["0.98", "1.00"]]
p res[0].map(&:to_f) #=> [0.98, 1.0]
p m = line.match(string)
#=> #<MatchData "* fix calc kpoints:50, in_plane:0.98, vertical:1.00" 1:"0.98" 2:"1.00">
p [m[1].to_f, m[2].to_f] #=> [0.98, 1.0]
게다가 최근 눈에 띄는 수법으로 패치도 했다.
string = Regexp.new('in_plane:(?<x>.+), vertical:(?<y>.+)')
res = line.match(string)
=> #<MatchData "in_plane:0.98, vertical:1.00" x:"0.98" y:"1.00">
irb(main): > res[:x]
=> "0.98"
irb(main): > res[:y]
=> "1.00"
:x
또는 :y
symbol로 찾을 수 있습니다."=~"이면
irb(main):001:0> line = '* fix calc kpoints:50, in_plane:0.98, vertical:1.00'
=> "* fix calc kpoints:50, in_plane:0.98, vertical:1.00"
irb(main):003:0> /in_plane:(?<x>.+), vertical:(?<y>.+)/ =~ line
=> 23
irb(main):004:0> x
=> "0.98"
irb(main):005:0> y
=> "1.00"
해당 이름의 로컬 변수입니다.저기, 수치를 뽑을 때scanf("%i,%f")도 편리해요.
p line.scanf("* fix calc kpoints:50, in_plane:%f, vertical:%f")
#=>[0.98, 1.0]
C 언어와 같은format.regexp로 꺼내면 문자열, tof 또는 toi로 flat, int로 변환해야 하며,scanf로 꺼낸 후 type으로 꺼냅니다.source ~/git_hub/ruby_docs/chart_style_ruby/c05_rubular.org
Reference
이 문제에 관하여(차트 ruby-appeendix-V(rubular)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/daddygongon/items/5e2de543400fe56be768텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)