TL; DR;
내가 좋아하는 (정규식 표현) 문자열을 변환 할 "\\."
로 "\."
(에 가까운 무언가를 깨끗하고 탄력있는 방법 sed 's/\\\\/\\/g'
이지만이 날 경우에 깨질 수 있을지 모르겠어요,)
val.decode('string-escape')
내가 python3를 사용하고 있기 때문에 옵션이 아닙니다.
지금까지 시도한 것 :
val.replace('\\\\', '\\')
val.encode().decode('unicode-escape')
문자열 이스케이프 (및 이스케이프 해제)가 상당히 흔하고 기본적인 문제처럼 보이지만 아직 해결책을 찾지 못했기 때문에 관련 부분을 놓쳤다 고 확신합니다. = /
전체 기사 :
나는 그렇게 YAML 파일을 가지고
- !Scheme
barcode: _([ACGTacgt]+)[_.]
lane: _L(\d\d\d)[_.]
name: RKI
read: _R(\d)+[_.]
sample_name: ^(.+)(?:_.+){5}
set: _S(\d+)[_.]
user: _U([a-zA-Z0-9\-]+)[_.]
validation: .*/(?:[a-zA-Z0-9\-]+_)+(?:[a-zA-Z0-9])+\.fastq.*
...
"Scheme"개체를 설명합니다. '이름'키는 식별자이고 나머지는 정규식을 설명합니다.
해당 YAML에서 객체를 구문 분석 할 수 있기를 원하므로 from_yaml
클래스 메서드를 작성했습니다 .
scheme = Scheme()
loaded_mapping = loader.construct_mapping(node) # load yaml-node as dictionary WARNING! loads str escaped
# re.compile all keys except name, adding name as regular string and
# unescaping escaped sequences (like '\') in the process
for key, val in loaded_mapping.items():
if key == 'name':
processed_val = val
else:
processed_val = re.compile(val) # backslashes in val are escaped
scheme.__dict__[key] = processed_val
문제는 loader.construct_mapping(node)
백 슬래시가 이스케이프 된 문자열 을 로드하므로 정규식이 더 이상 정확하지 않다는 것입니다.
val.encode().decode('unicode-escape')
및의 여러 변형을 시도했지만 val.replace('\\\\', '\\')
운이 없었습니다.
누군가 이것을 처리하는 방법을 알고 있다면 대단히 감사하겠습니다! 저는 이런 특정한 일을하는 방식에 결혼하지 않았으며 대안적인 접근 방식에 열려 있습니다.
감사합니다!
이 매우 간단한 YAML 파일이 있다고 가정합니다.
lane: _L(\d\d\d)[_.]
다음과 같이 PyYAML로로드합니다.
import yaml
import re
with open('test.yaml', 'rb') as stream:
data = yaml.safe_load(stream)
lane_pattern = data['lane']
print(lane_pattern)
lane_expr = re.compile(data['lane'])
print(lane_expr)
그러면 결과는 예상 한대로 정확하게 나타납니다.
_L(\d\d\d)[_.]
re.compile('_L(\\d\\d\\d)[_.]')
YAML이 구문 분석 될 때 진행되는 문자열의 이중 이스케이프가 없으므로 이스케이프를 해제 할 수 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다