我有一个包含一些我需要保留的替代品的列表。例如,替换列表:['1st', '2nd', '10th', '100th', '1st nation', 'xlr8', '5pin', 'h20']
.
一般来说,包含字母数字字符的字符串需要按如下方式拆分数字和字母:
text = re.sub(r'(?<=\d)(?=[^\d\s])|(?<=[^\d\s])(?=\d)', ' ', text, 0, re.IGNORECASE)
前面的正则表达式模式通过在以下内容之间添加空格成功地将所有数字与字符分开:
Original Regex
ABC10 DEF --> ABC 10 DEF
ABC DEF10 --> ABC DEF 10
ABC 10DEF --> ABC 10 DEF
10ABC DEF --> 10 ABC DEF
然而,有一些字母数字单词是替换列表的一部分,无法分开。例如,以下字符串包含1ST
作为替换列表的一部分不应分隔,并且应省略它们而不是添加空格:
Original Regex Expected
1ST DEF 100CD --> 1 ST DEF 100 CD --> 1ST DEF 100 CD
ABC 1ST 100CD --> ABC 1 ST 100 CD --> ABC 1ST 100 CD
100TH DEF 100CD -> 100 TH DEF 100 CD -> 100TH DEF 100 CD
10TH DEF 100CD -> 10 TH DEF 100 CD -> 10TH DEF 100 CD
为了获得上面示例中的预期列,我尝试使用IF THEN ELSE
正则表达式中的方法,但我在 Python 语法中遇到错误:
(?(?=condition)(then1|then2|then3)|(else1|else2|else3))
根据语法,我应该有如下内容:
?(?!1ST)((?<=\d)(?=[^\d\s])|(?<=[^\d\s])(?=\d)))
where (?!...)
将包括匹配正则表达式模式时要避免的可能替换,在本例中为单词1ST 10TH 100TH
.
如何避免字符串中匹配的单词替换?