正则表达式选择所有数学运算符而不是连字符

时间:2018-04-27 06:59:44

标签: python regex

我正在尝试实现一个正则表达式,它在所有数学运算符上拆分字符串,但字符串中没有连字符:

fst

预期产出:

dummy_string= "I Dont_Know The-Meaning_2018-You Know_Meaning_2017+You Know_Meaning_2017"

string_list = re.split("[0-9][+/*\-][A-Za-z]", dummy_string)

print(string_list)

>>['I Dont_Know The-Meaning_201', 'ou Know_Meaning_201', 'ou Know_Meaning_2017']

我正在使用regex(re)包。

1 个答案:

答案 0 :(得分:1)

您可以使用(?<=[0-9])(?=[A-Za-z])外观,而不是消费模式:

import re
dummy_string= "I Dont_Know The-Meaning_2018-You Know_Meaning_2017+You Know_Meaning_2017"
string_list = re.split("(?<=[0-9])[+/*-](?=[A-Za-z])", dummy_string)
print(string_list)
# => ['I Dont_Know The-Meaning_2018', 'You Know_Meaning_2017', 'You Know_Meaning_2017']

请参阅Python demo

使用[0-9][+/*\-][A-Za-z]分割字符串时,非字分隔符前面的数字和后面的字母消耗,即添加到匹配值中,{{1从结果输出中删除此文本。使用lookarounds时,匹配的文本保持&#34;未消耗&#34;,它们不会添加到匹配值中,因此保留在re.split输出中。

请注意,当它位于字符类re.split = -的末尾时,您不必转义[+/*-]。如果您计划在课程中添加更多字符,可以保留[+/*\-]转义以避免进一步的问题。