XML 덤프에서 Wiki 텍스트를 구문 분석하고 있는데, 'section'이라는 문자열에는 재구성하려는 일부 인수를 포함하여 이중 괄호로 묶인 템플릿이 포함되어 있습니다. 내가왔다,루비에서 gsub로 스캔 바꾸기 : gsub 블록에서 코드를 허용하는 방법?
section.scan(/\{\{(TextTerm)\|(.*?)\|(.*?)\}\}/i).each { |item| puts "1=" + item[1] # arg1a etc.}
을 그리고 :
section="Sample of a text with a first template {{TextTerm|arg1a|arg2a|arg3a...}} and then a second {{TextTerm|arg1b|arg2b|arg3b...}} etc."
내가 사용하는 루프에 각 템플릿과 작업을 얻을 수 scan
및 정규식을 사용할 수 있습니다
이라는 TextTerm를 예를 가지고 템플릿의 첫 번째 인수의 데이터베이스를 추출 할 수 있어야합니다.
이제 "NewTextTerm"템플릿의 이름을 바꾸고 첫 번째 인수 대신 두 번째 인수를 배치하여 인수를 재구성하려고합니다.
동일한 루프에서 수행 할 수 있습니까? gsub(rgexp){ block}
에 의해 scan
을 변경하여 예를 들어 :
section.gsub!(/\{\{(TextTerm)\|(.*?)\|(.*?)\}\}/) { |item| '{{NewTextTerm|\2|\1}}'}
내가 얻을 :
"Sample of a text with a first template {{NewTextTerm|\\2|\\1}} and then a second {{NewTextTerm|\\2|\\1}} etc."
는 정규 표현식의 인수가 인식되지 않는 것을 의미한다. 비록 효과가 있었다고해도, 나는 인수에서 작업하기 위해
gsub
블록 안에 어떤 장소를 갖고 싶습니다. 예를 들어
scan().each
블록과 비슷하지만 대체 할 문자열 만
gsub
블록에
puts
을 사용할 수 없습니다.
모든 아이디어를 환영합니다.
추신 : 일부 수정 : 중괄호와 "section = added", 코드가 완성되었습니다.
이 주석은 적절하게 upvoted 수 있도록 답변 자격이 있습니다. – DNNX
이중 ** 괄호 ** 또는 이중 ** 괄호 **를 의미합니까? – sawa
단일 행이 아닌 전체 코드 예제를 보여줍니다. 짧은 루프에서 전체 문제를 처리하는 더 좋은 방법이 있지만 코드를 보지 않아도 사용자가 설정 한 내용을 알 수 없습니다. 결과적으로 점진적인 향상을 제안 할 수 있지만 근본적으로 더 나은 것을 제안 할 수 있습니다. 또한 작업중인 텍스트의 큰 샘플을 볼 필요가 있습니다. 파일 전체에 동일한 태그 세트가있는'{{...}} '블록이 반복됩니까? 템플릿 처리 엔진을 작성하는 것은 어렵지 않지만 더 나은 정보가 필요합니다. –