使用子字符串切片构建正则表达式

时间:2019-06-24 13:51:12

标签: python regex

我有两个字符串列表,其中包含一些不同的元素和一些重复的元素。但是,第二个字符中的重复元素有所不同 例如

ListA=[MaB123, MaD789, DaB123]

ListB=[MbB123, MbQ789, DbB123]

我想检查列表A中的每个元素是否存在列表B中的重复。

在上面,我想要:

ListA [0]匹配ListB [0]

ListA [1]没有匹配项

ListA [2]匹配ListB [2]

我正在尝试使用re库做到这一点。

我打算编写一个for循环来检查ListA的每个元素,并测试与ListB中的元素的匹配情况(可能效率低下,但此刻正试图绕过正则表达式),但我陷入了困境获得我需要使用的正则表达式的阶段。

所以让我们假设

StringA=listA[0]='MaB123'

StringB=listB[0]='MbB123'

我想使用字符串切片构建正则表达式,以便可以在for循环中动态构建正则表达式。

这是我尝试过的

m=re.search(r'(stringA[0])[ab](stringA[2:])',stringB)
display(m)

但是它返回“ none”

m=re.search(r'([M])[ab]([B123])',stringB)
display(m)

返回一个匹配项。第一个表达式和第二个表达式之间有什么区别,如何使用字符串切片构建正则表达式?

非常感谢

1 个答案:

答案 0 :(得分:0)

您应该使用f字符串或格式。您当前的正则表达式不包含您的变量。

m=re.search(r'(stringA[0])[ab](stringA[2:])',stringB)

对此

m=re.search(rf'({stringA[0]})[ab]({stringA[2:]})',stringB)