我的字符串如下:
bo_1
bo_1
bo_2
bo_2
bo_3
bo_3
bo_4
bo_4
bo_5
bo_5
bo_6
bo_6
bo_7
bo_7
bo_8
bo_8
bo_9
bo_9
bo_10
bo_10
我想匹配每个数字的第一个实例,而忽略下一个重复的行。我的正则表达式如下:
(bo_\d)(?![\s\S]*\1)
返回以下内容:
'bo_2'
'bo_3'
'bo_4'
'bo_5'
'bo_6'
'bo_7'
'bo_8'
'bo_9'
'bo_1'
我将如何修改正则表达式以返回如下结果(在开头包含“ bo_1”,在结尾包含“ bo_10”):
'bo_1'
'bo_2'
'bo_3'
'bo_4'
'bo_5'
'bo_6'
'bo_7'
'bo_8'
'bo_9'
'bo_10'
答案 0 :(得分:1)
从技术上讲,您不需要正则表达式(例如,可以使用=IF(MOD(MONTH(H2)-1,$F$5)=0,$G$5,0)
)
set()
无论如何,您的正则表达式存在的问题是>>> # Assume your string is in the variable called "text"
>>> result = set(text.split('\n'))
>>> result
{'bo_7', 'bo_3', 'bo_1', 'bo_6', 'bo_5', 'bo_8', 'bo_9', 'bo_2', 'bo_4', 'bo_10'}
也与bo_1
匹配,因此正则表达式将其视为重复项。您可以使用单词边界来解决它,以确保测试完整的“单词”是否匹配:
bo_10
答案 1 :(得分:0)
使用
(bo_\d+$)(?![\s\S]*^\1$)
由于要包含bo_10
,因此在初始组中应该使用\d+
,而不仅仅是\d
。然后,在否定的范围内,将反引号放在行首锚和行尾锚之间,例如,bo_1
不会被排除,因为它后面跟着bo_10
。