我正在尝试实现一个正则表达式,它在所有数学运算符上拆分字符串,但字符串中没有连字符:
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)包。
答案 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
= -
的末尾时,您不必转义[+/*-]
。如果您计划在课程中添加更多字符,可以保留[+/*\-]
转义以避免进一步的问题。