소문자 화학 화학식의 모호성을 해결하려고합니다. 일부 요소 이름은 다른 요소 이름의 하위 문자열이므로 모두 함께 실행되므로 동일한 패턴에 대해 여러 개의 전역 일치가있을 수 있습니다.소문자 화학 수식의 모든 가능한 순열 찾기
hgas
문자열에 대한 정규식 /^((h)|(s)|(hg)|(ga)|(as))+$/
을 고려하십시오. 두 가지 가능한 일치가 있습니다. hg, as
및 h, s, ga
(입력과 비교하여 순서가 맞지만 문제는 아닙니다.) 모든 가능한 기호에 대한 정규식은 분명 더 길지만이 예제는 단순화를 위해 수행되었습니다.
Regex의 강력한 lookahead 및 lookbehind는 매우 긴 문자열조차도이 패턴과 일치하는지 또는 문자의 가능한 순열이 없는지를 결정할 수 있도록합니다. 부지런히 가능한 모든 순열을 시도합니다. 예를 들어, 나머지가 g
인 문자열의 끝에 도달하면 다시 돌아가 다른 조합을 다시 시도하십시오.
정규식 또는 확장명이 일종의 인 언어를 찾고 있는데,이 경우 일치 검색을 계속 수행하는 기능을 추가합니다.이 경우 과 hg, as
을 찾습니다.
이 문제에 대한 regex의 복잡한 lookahead 및 lookbehind 기능을 재구성하는 것이 합리적인 해결책처럼 보이지 않습니다. 특히 최종 정규식에 각 기호 다음에 \ d *가 포함되어 있다고 생각하면 특히 그렇습니다.
추가 매핑을 찾으려면 /^((as)|(ga)|(hg)|(s)|(h))+$/
정규 표현식의 순서를 뒤집을 생각이 있지만 대부분이 하나의 추가 일치를 찾을 것입니다. 정규 표현식에 이론적 배경이 없기 때문에 합리적인지 알아야합니다. 시험.
기존 정규 표현식을 사용하여 샘플 페이지를 만들었습니다.이 정규 표현식은 주어진 소문자 문자열에 대해 1 개 또는 0 개의 일치 항목을 찾아 대문자로 올바르게 반환합니다. 매칭시 첫 100 개의 화학 기호를 사용합니다.
http://www.ptable.com/Script/lowercase_formula.php?formula=hgas
TL; DR : I 문자열에 0 또는 1을 가능 화학식 순열 맞게 정규식있다. 1 개 이상의 경기를 찾으려면 어떻게해야합니까?
한 아름다운! – Gabber
이것은 꽤 인상적입니다. 사이의 숫자를 처리하여 모호성을 줄일 수 있습니까? "h2so4" – Lucent
회원의 목록에 숫자를 추가하면 효과가 있다고 생각합니다. 가장 우아한 방법은 아니지만 '['h ','s ','hg ','ga ','as ','1 ', 2'.....]'와 같은 것을하면 괜찮을 것입니다. 테스트 목적. 'name (X) : integer (X)'라인 추가. – Gabber