正则表达式,我想匹配直到某些字符,但是如果没有这些字符,仍然可以匹配字符串

时间:2018-10-19 14:41:36

标签: python regex

在第二组中的

,我想匹配单词,直到遇到(或>符号。 但是,即使它没有像字符串3和4那样的符号,我仍然希望它能够匹配单词。我正在使用Python。

regex not matching

3 个答案:

答案 0 :(得分:2)

您可以交替匹配字符串的结尾:

.*(#\d*\,?\d+)\s.*in\s(.*?)\s*(?=[(>]|$)

演示:https://regex101.com/r/BliHlU/1

答案 1 :(得分:1)

在匹配不应该包含字符的序列时,只需使用字符集即可反转不需要的字符。根据您的示例,我也对此进行了简化。唯一的缺点是比赛将包括尾随空格。

r'.*(#\d*\,?\d+)\s+in\s+([^(>]*)'

>>> for test in tests:
    print(re.findall(r'.*(#\d*\,?\d+)\s+in\s+([^(>]*)', test))

[('#26,968', 'Office Products ')]
[('#13,452', 'Industrial & Scientific ')]
[('#99,999', 'baby')]
[('#888', 'office supplies')]

答案 2 :(得分:0)

这可能不是最好的模式,并且可能会流行很多,但是如果提供的样本是对数据的良好采样,那么我可以建议另一种模式:

r"([#\d,]+) in ([\w\s&]+)>?([\w\s&]*)([()\w\s\d]*)"

https://regex101.com/r/hKD6AX/2

希望这会有所帮助!