正则表达式:将单个字符组合在一起,只要它们是字母
Regex: Set together single characters as long as they are letters
考虑以下示例:
Original Regex
A-B-C SCHOOL INSTITUTION --> ABC SCHOOL INSTITUTION
A B C SCHOOL INSTITUTION --> ABC SCHOOL INSTITUTION
目的是将用连字符或空格分隔的单个字母组合在一起。我使用了以下模式:
(?<!\w\w)(?:\s+|-)(?!\w\w)
但是,我有一个问题,就是不能对数字应用相同的规则,因为 \w 包含数字,所以出现了这个问题。例如,以下内容是不允许的,应按原样保持分隔:
Original Regex Desired
A 5 M SCHOOL CORPORATION A5M SCHOOL CORPORATION A 5 M SCHOOL CORPORATION
谢谢
首先这个(?:\s+|-)
可以缩短为[\s-]+
或[ -]+
。其次,你需要的是白名单而不是黑名单。
这意味着您不查找 (?!\w\w)
。相反,您要查找 (?=\w\b)
或在这种情况下具体查找 (?=[a-zA-Z]\b)
。
最后,您不想匹配数字。所以你需要在匹配任何[ -]
之前排除它们:(?<!\d)[ -]+
.
综合起来:
re.sub(r'(?<!\d)[ -]+(?=[a-zA-Z]\b)', '', str)
考虑以下示例:
Original Regex
A-B-C SCHOOL INSTITUTION --> ABC SCHOOL INSTITUTION
A B C SCHOOL INSTITUTION --> ABC SCHOOL INSTITUTION
目的是将用连字符或空格分隔的单个字母组合在一起。我使用了以下模式:
(?<!\w\w)(?:\s+|-)(?!\w\w)
但是,我有一个问题,就是不能对数字应用相同的规则,因为 \w 包含数字,所以出现了这个问题。例如,以下内容是不允许的,应按原样保持分隔:
Original Regex Desired
A 5 M SCHOOL CORPORATION A5M SCHOOL CORPORATION A 5 M SCHOOL CORPORATION
谢谢
首先这个(?:\s+|-)
可以缩短为[\s-]+
或[ -]+
。其次,你需要的是白名单而不是黑名单。
这意味着您不查找 (?!\w\w)
。相反,您要查找 (?=\w\b)
或在这种情况下具体查找 (?=[a-zA-Z]\b)
。
最后,您不想匹配数字。所以你需要在匹配任何[ -]
之前排除它们:(?<!\d)[ -]+
.
综合起来:
re.sub(r'(?<!\d)[ -]+(?=[a-zA-Z]\b)', '', str)