检测标点符号后缺失的 space 和标点符号前的 space
Detect missing space after punctuation and space before punctuation
我想检测缺少的 space 标点符号和额外的 space before 标点符号。我尝试使用正则表达式来匹配 [A-Za-z0-9][?.,:!][A-Z]
和 [A-Za-z0-9]\s+[?.,:!]
,但是当应用于字符串 Something is in the air tonight.Or is it ?
.
时,这两个 return None
import re
mystring = "Something is in the air tonight.Or is it ?"
missing_space_regex = re.compile('[A-Za-z0-9][?.,:!][A-Z]')
print(missing_space_regex.match(mystring))
extra_space_regex = re.compile('[A-Za-z0-9]\s+[?.,:!]')
print(extra_space_regex.match(mystring))
我意识到上面的 extra_space_regex
不会检测文本以标点符号开头的情况,但我可以将其作为特殊情况处理。
如果可以使用 regex
而不是 re
,则可以利用正则表达式 Unicode 字符 类,例如 \p{P}
用于标点符号:
import regex
mystring = "Something is in the air tonight.Or is it ?"
missing_space_regex = regex.compile(r'.*?\p{P}\S')
print(missing_space_regex.match(mystring))
extra_space_regex = regex.compile(r'.*?\s\p{P}')
print(extra_space_regex.match(mystring))
输出:
<regex.Match object; span=(0, 33), match='Something is in the air tonight.O'>
<regex.Match object; span=(0, 42), match='Something is in the air tonight.Or is it ?'>
或 如果您确实想使用您选择的标点符号和 re
:
punc = "?.,:!"
missing_space_re = re.compile(f".*?[{punc}]\S")
print(missing_space_re.match(mystring))
extra_space_re = re.compile(f'.*?\s[{punc}]')
print(extra_space_re.match(mystring))
我想检测缺少的 space 标点符号和额外的 space before 标点符号。我尝试使用正则表达式来匹配 [A-Za-z0-9][?.,:!][A-Z]
和 [A-Za-z0-9]\s+[?.,:!]
,但是当应用于字符串 Something is in the air tonight.Or is it ?
.
None
import re
mystring = "Something is in the air tonight.Or is it ?"
missing_space_regex = re.compile('[A-Za-z0-9][?.,:!][A-Z]')
print(missing_space_regex.match(mystring))
extra_space_regex = re.compile('[A-Za-z0-9]\s+[?.,:!]')
print(extra_space_regex.match(mystring))
我意识到上面的 extra_space_regex
不会检测文本以标点符号开头的情况,但我可以将其作为特殊情况处理。
如果可以使用 regex
而不是 re
,则可以利用正则表达式 Unicode 字符 类,例如 \p{P}
用于标点符号:
import regex
mystring = "Something is in the air tonight.Or is it ?"
missing_space_regex = regex.compile(r'.*?\p{P}\S')
print(missing_space_regex.match(mystring))
extra_space_regex = regex.compile(r'.*?\s\p{P}')
print(extra_space_regex.match(mystring))
输出:
<regex.Match object; span=(0, 33), match='Something is in the air tonight.O'>
<regex.Match object; span=(0, 42), match='Something is in the air tonight.Or is it ?'>
或 如果您确实想使用您选择的标点符号和 re
:
punc = "?.,:!"
missing_space_re = re.compile(f".*?[{punc}]\S")
print(missing_space_re.match(mystring))
extra_space_re = re.compile(f'.*?\s[{punc}]')
print(extra_space_re.match(mystring))