문제

I have code which reads a text file and outputs the amount of TLA's in the text as a percentage out of how many lines contain text.

import re
total_lines = 0
matched_lines = 0
for line in open("sentences.txt"):
    total_lines += 1
    matched_lines += bool(re.search(r"\b[A-Z]{3}\b", line))
    matched_lines += bool(re.search(r"\b[A-Z]\\.[A-Z]\\.[A-Z]\b", line)) # DOES NOT WORK
print('{}% of sentences contain a TLA'.format(round(float(matched_lines) / total_lines * 100, 1)))

What i'm trying to do is count TLA's with full stops between them. So like now it counts WWW but i want it to count W.W.W as well.

도움이 되었습니까?

해결책

In your re it should be \. not \\..

In Python an r outside a string makes a raw string literal. The benefit of raw string literals is that backslashes (\) are not special to Python, which means it's easier to pass through to re where they are special.

In both lines you are using raw string literals (good!), so the \b is specifying a word boundary. However, the \\. is looking for a \ followed by any character. What you want is \. which is a literal ..

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top