문자열 뒤의 시간을 찾는 정규식

문자열 뒤의 시간을 찾는 정규식

그래서 저는 dwmblocks 상태 표시줄에 대한 스크립트를 작성하려고 하며 일몰 및 일출 시간을 확인하는 작은 모듈을 얻고 싶습니다. 확실히,이 웹사이트같은 작업을 수행하는 데 도움이 될 수 있지만 컬 파일에서 일출 및 일몰 값을 파악하는 방법을 모르겠습니다.

curl v2.wttr.in/nyc | grep (the values after 'Sunrise:  ' and 'Sunset:  ')

"sunrise:" 및 "sunset:" 없이 값을 반환하는 정규식을 만들 수 있습니까?

답변1

옵션 이 grep있는 경우 .-P-o

$ curl -s v2.wttr.in/nyc | grep -Po 'Sun(rise|set):.*?\K\d+:\d+:\d+'
07:31:15
17:47:15

.*?digits:digits:digits패턴을 찾을 때까지 가능한 한 적은 수의 문자를 건너뛰십시오 . 공백을 건너뛰고 거기에 있는 색상 이스케이프 시퀀스도 건너뜁니다. \K출력의 시작 부분( -o게임의 끝 부분)을 알려줍니다.K

답변2

사용행복하다(이전 Perl_6)

raku -ne 'my @a = .split("|").map: *.trim; \
          .[2].put if .contains("Sunrise" | "Sunset") for @a.map: *.split( / \s+ /);'

또는

raku -ne 'my @a = .split("|").map: *.trim; \
          .put for @a.grep(/ Sunrise | Sunset /).map: *.split(/ \s+ / ).[2];' 

curlOP가 편집한 페이지는 고도로 구조화된 문서인 것으로 보이므로 해당 속성을 활용하세요. 위의 코드(두 예 모두)는 행을 가져와 |막대의 별도 열로 분할하고 결과를 배열( @a)에 저장합니다.

첫 번째 예: 두 번째 명령문에서는 의 요소가 키/값 에 배치 @a됩니다 . 키/값은 with 를 통해 반복되며 , 및/또는 문자열인 경우 세 번째 (값) 하위 요소만 표시됩니다.split\s+for[2]containsSunriseSunset

@agrep두 번째 예: or와 일치하는 요소를 찾을 때까지 배열 요소를 반복합니다 . 그런 다음 모든 ped 요소가 키/값에 추가되고 값(인덱스)이 반환됩니다.SunriseSunsetgrepsplit\s+[2]


위의 Raku 답변의 장점은 "일출" 또는 "일몰"과 관련된 값이 무엇이든 반환할 수 있다는 것입니다. 예를 들어 사이트가 12시간제로 전환되면 AM/PM정보를 다시 받게 됩니다. 또는 @ StéphaneChazelas의 탁월한 답변은 실제로 콜론으로 구분된 숫자를 선택합니다. Raku를 사용하면 유사하게 "추가 마일을 이동"하고 comb세 번째(값) 하위 요소를 전달하여 올바른 숫자 패턴을 얻을 수 있습니다.

.comb(/ [\d**2] ** 3 % \: /)

Raku의 정규식은 comb다음과 같이 해석될 수 있습니다.3회 반복되고 () 와 콜론 으로 구분된 \d**2숫자 쌍과 일치하는 콘텐츠를 찾아 반환합니다.** 3%\:.

함께 넣어보세요:

raku -ne 'my @a = .split("|").map: *.trim; \
          .comb(/ [\d**2] ** 3 % \: /).put for @a.grep(/ Sunrise | Sunset /).map: *.split(/ \s+ / ).[2];'

또는

raku -ne 'my @a = .split("|").map: *.trim; .[2].comb(/ [\d**2] ** 3 % \: /).put if .contains("Sunrise" | "Sunset") for @a.map: *.split( / \s+ /);'

위에 설명된 구조화된 방식으로 텍스트를 분류하면 dd:dd:dd"일출" 또는 "일몰"과 관련된 시간만 얻을 수 있습니다. 물론 위의 4개 코드 예제 모두에서 식별 요소를 원하는 대로 자유롭게 결합/제거할 수 있습니다.

출력 예(위의 4개 코드 예 모두):

07:31:15
17:47:15

https://rakudo.org
https://raku.org

관련 정보