当前位置: 首页 > 知识库问答 >
问题:

Python如何查找字符串的结尾4个字符或5个字符是否遵循模式

韩麒
2023-03-14

我有一堆需要清理的字符串,它有以下模式:

12345SNET1
1234567SNETA2
123456SNET3

令人头疼的是,SNET之后的任何内容都可以是从0到9的任何整数,也可以是A-Z的char加上从0到9的整数。

是否无论如何都要使用正则表达式来检测字符串是否具有此模式,以便我可以使用:

if regex detect (returns True):
    str = str[:-1]

elif regex detect (returns True):
    str = str[:-2]

共有3个答案

柴嘉年
2023-03-14

如果使用正确的正则表达式,不需要有两个case。

values = ["12345SNET1", "1234567SNETA2", "123456SNET3"]
for value in values:
    m = re.match(r'\d+SNET([A-Z]?\d)', value)
    if m:
        print(m.group(1))

这会打印出来的

1
A2
3

如果希望文本位于最后一个字符之前,可以在正则表达式中添加额外的括号以捕捉该部分:

values = ["12345SNET1", "1234567SNETA2", "123456SNET3"]
for value in values:
    m = re.match(r'(\d+SNET)([A-Z]?\d)', value)
    if m:
        print(m.group(1))

后果

12345SNET
1234567SNET
123456SNET
松安民
2023-03-14

您可以使用re.sub结合正后置来丢弃不需要的字符,方法如下:

import re
s1 = "12345SNET1"
s2 = "1234567SNETA2"
s3 = "123456SNET3"
out1 = re.sub(r"(?<=SNET)[A-Z]?\d", "", s1)
out2 = re.sub(r"(?<=SNET)[A-Z]?\d", "", s2)
out3 = re.sub(r"(?<=SNET)[A-Z]?\d", "", s3)
print(out1)  # 12345SNET
print(out2)  # 1234567SNET
print(out3)  # 123456SNET
阮疏珂
2023-03-14

>

if re.fullmatch(r".*SNET\d", value):
    value = value[:-1]

if re.fullmatch(r".*SNET[A-Z]\d", value):
    value = value[:-2]

您可以直接使用re.sub替换末尾

value = re.sub(r"(?<=SNET)[A-Z]?\d", "", value)

为了使用,您可以将其导出到方法中

def clean(value):
    if re.fullmatch(r".*SNET\d", value):
        return value[:-1]
    if re.fullmatch(r".*SNET[A-Z]\d", value):
        return value[:-2]
    return value

# OR
def clean(value):
    return re.sub(r"(?<=SNET)[A-Z]?\d", "", value)


if __name__ == '__main__':
    values = ["12345SNET1", "1234567SNETA2", "123456SNET3"]
    print(values)  # ['12345SNET1', '1234567SNETA2', '123456SNET3']
    values = list(map(clean, values))
    print(values)  # ['12345SNET', '1234567SNET', '123456SNET']
 类似资料:
  • 例如: 字符串1=helloworld字符串2=asdfuvjerhelloworld 这应该是真的。 另一个例子:字符串1=helloworld字符串2=lshewodxzr 这也应该是真的。 所以我正在研究如何创建一个方法,它将返回一个布尔值,检查第二个字符串是否包含第一个字符串中的字母。在第二个示例中,string2只有一次字母l,尽管字母l在string1中出现了三次,但仍然返回true。

  • 我想解析一个字符串,看看它是匹配整个字符串还是子字符串。我试过这个: 但我的问题是:

  • 本文向大家介绍如何检查Python的另一个字符串中是否存在多个字符串?,包括了如何检查Python的另一个字符串中是否存在多个字符串?的使用技巧和注意事项,需要的朋友参考一下 要检查数组中的任何字符串是否在另一个字符串中,可以使用any函数。  示例 输出结果 这将为您提供输出: 示例 尽管有些夸张,但您也可以使用正则表达式来匹配数组。例如: 输出结果 这将为您提供输出:

  • 问题内容: 如何找到两个子字符串之间的字符串? 我当前的方法是这样的: 但是,这似乎效率很低而且不合Python。什么是做这样的更好的方法? 忘了提:该字符串可能无法启动,并最终和。他们之前和之后的字符可能更多。 问题答案:

  • 问题内容: 我正在解决一个简单的问题: 在Java中删除字符数组中的某些字符,想法很简单: 我想输入一个信号,表示当我们想要使用例如生成一个字符串时,不必考虑数组的其余部分 Java中是否有这样的字符?(我想是,但我不确定) 例如,当我们调用: 这将被打印: 虽然我想得到,但我不想使用新的数组来做到这一点 问题答案: Java不会像C那样“标记”字符串的结尾。它跟踪长度和值,因此字符串中可以包含零

  • 问题内容: 如何检查数组中的任何字符串是否在另一个字符串中? 喜欢: 该代码行不通,只是为了展示我想要实现的目标。 问题答案: 你可以使用: 同样,要检查是否找到了列表中的所有字符串,请使用all代替any。