다음은 두 가지 Perl 솔루션입니다. 첫 번째 단어는 단어 단위로 이동하고 모든 단어의 첫 번째 문단이 만든 배열을 만든 다음 해당 문구가 나타내는 두문자어를 제거합니다. 상당히 약하며 한 줄당 두문자와 글자 이상인 경우에는 실패해야합니다 - 정규식에 (? {}) 패턴을 사용하여 정규식에 삽입하면 나를 기분 좋게합니다.
use strict;
use warnings;
use 5.010;
$_ = "Static application security testing (SAST)";
my @first;
s/
\b
(?<first>\p{L})\p{L}*
\b
(?{ push @first, $+{first} })
\K \s+ \(
(??{ join '', map { uc } @first; })
\)
//gx;
say;
한편이 솔루션은 머리 글자와 같은 것을 먼저 확인한 다음 필요한만큼 단어를 일치시키는 정규식을 구성합니다. $ _ = "정적 응용 프로그램 보안 테스트 (SAST)";
my ($possible_acronym) = /\((\p{Lu}+)\)/;
my $regex = join '', map({ qr/\b(?i:$_)\p{L}*\b\s*?/ } split //, $possible_acronym), qr/\K\Q($possible_acronym)/;
s/$regex//;
say;
는 (나는? (사용하여 솔루션을 만드는 시도 (정의)) 등 tchrist의 대답
here 같은 패턴,하지만 비참하게 실패. 아 글쎄.)에 대한 자세한 내용은
(? :)라는 캡처 (?), \ K, 그리고 부풀어 오르는 것들이 한꺼번에 들자면, perlre이 답이 될 것입니다.
어떤 언어입니까? 이것은 닷넷에서 약간의 정규식이 될 수 있지만 자바가 처리 할 수 있는지는 잘 모르겠습니다. 일반적인 대답은 정규식을 사용하는 것은 불가능하지만 ** 단어를 반복하여 수동으로 처리하는 것은 매우 쉽다는 것입니다. 파서는 실제로 필요하지 않습니다. – Kobi
regex가 이것을 할 수 있다고해도 * best-done-via-regex 도메인에 * 속하는지 확실하지 않습니다. [정규 표현식을 사용하거나 사용하지 않으려면] (http://stackoverflow.com/questions/4098086/to-use-or-not-to-use-regular-expressions/4098123#4098123)을 참조하십시오. 괄호 안의 모든 대문자 공백 문자 시퀀스가 뒤 따르는 여러 단어를 찾는 것은 쉽고 가장 좋은 방법입니다. – delnan
Yikes, 내가 처음으로 이것을 읽었을 때 내 두뇌는 * 약어 *에 대한 오너 그램을 잘못 등록했습니다! 정규 표현식이 * 머리 글자 어에 부적절하다는 것을 알지 못합니다 * - 제안 된 해법은 매우 직설적입니다. 그러나 * 아나그램을 생성하기 위해 * 사용하는 것은 본질적으로 바이올린과 같은 단일 스레드 악기에 대위법 대위법을 구현하는 것과 같습니다. 너는 그것을 시도하기 위해 미친, 또는 진정한 주인이되어야 할 것이다 (* viz.* BWV 1001-1006). – tchrist