gpt4 book ai didi

Python正则表达式查找字母数字字母指定的所有组合

转载 作者:行者123 更新时间:2023-12-01 05:34:18 25 4
gpt4 key购买 nike

我需要实现一个Python正则表达式来搜索所有出现的A1aA_1_aA-1-a_A_1_a__A1a,其中:

  • A 可以是A 到 Z
  • 1 可以是 1 到 9
  • a 可以是a 到 z

其中只有三个字符、字母、数字、字母,用下划线、破折号或什么都没有分隔。搜索字符串中的大小写需要完全匹配。

我遇到的主要问题是,有时这三个字母组合通过破折号和下划线连接到其他文本。还创建相同的正则表达式来搜索 A1aA-1-aA_1_a

此外,我忘了提及这是一个 XML 文件。

谢谢,稍作修改就发现了我正在寻找的每一个出现的地方 [-]?[A][-]?[1][-]?[a][-]?,但我需要这些是类似

的变量
    [-]?[var_A][-]?[var_3][-]?[Var_a][-]? 

这样做可以吗

    regex = r"[-]?[%s][-]?[%s][-]?[%s][-]?" 
print re.findall(regex,var_A,var_Num,Var_a)

或者更像:

    regex = ''.join(['r','\"','[-]?[',Var_X,'][-]?[',Var_Num,'][-]?[',Var_x,'][-]?','\"'‌​])
print regex
for sstr in searchstrs:
matches = re.findall(regex, sstr, re.I)

但这不起作用

文件的示例行:运行脚本之前

<t:ION t:SA="BoolObj" t:H="2098947" t:P="2098944" t:N="AN7 Result" t:CI="Boolean_Register" t:L="A_3_a  Fdr2" t:VS="true">
<t:ION t:SA="RegisterObj" t:H="20971785" t:P="20971776" t:N="ART1 Result 1" t:CI="NumericVariable_Register" t:L="A3a1 Status" t:VS="1">
<t:ION t:SA="ModuleObj" t:H="2100736" t:P="2097152" t:N="AND/OR 14" t:CI="AndOr_Module" t:L="A_3_a**_2 Energized from Norm" t:S="0" t:SC="5">

运行脚本后我得到的结果:(删除整行并只保留下面的内容)

  • B_1_c
  • B1c1
  • B_1_c_2

我想要得到什么:

<t:ION t:SA="BoolObj" t:H="2098947" t:P="2098944" t:N="AN7 Result" t:CI="Boolean_Register" t:L="B_1_c  Fdr2" t:VS="true">
<t:ION t:SA="RegisterObj" t:H="20971785" t:P="20971776" t:N="ART1 Result 1" t:CI="NumericVariable_Register" t:L="B1c1 Status" t:VS="1">
<t:ION t:SA="ModuleObj" t:H="2100736" t:P="2097152" t:N="AND/OR 14" t:CI="AndOr_Module" t:L="B_1_c_2 Energized from Norm" t:S="0" t:SC="5">

import re
import os

search_file_name = 'Alarms Test.fwn'
pattern = 'A3a'
fileName, fileExtension = os.path.splitext(search_file_name)
newfilename = fileName + '_' + pattern + fileExtension
outfile = open(newfilename, 'wb')


def find_ext(text):
matches = re.findall(r'([_-]?[A{1}][_-]?[3{1}][_-]?[a{1}][_-]?)', text)
records = [m.replace('3', '1').replace('A', 'B').replace('a', 'c') for m in matches]
if matches:
outfile.writelines(records)
return 1
else:
outfile.writelines(text)
return 0


def main():
success = 0
count = 0
with open(search_file_name, 'rb') as searchfile:
try:
searchstrs = searchfile.readlines()
for s in searchstrs:
success = find_ext(s)
count = count + success
finally:
searchfile.close()

print count

if __name__ == "__main__":
main()

最佳答案

您想使用以下内容来查找匹配项。

matches = re.findall(r'([_-]?[a-z][_-]?[1-9][_-]?[a-z][_-]?)', s, re.I)

参见regex101 demo

如果您要查找匹配项,则可以删除所有 -_ 字符,您可以这样做..

import re

s = '''
A1a _A_1 A_ A_1_a A-1-a _A_1_a_ _A1a _A-1-A_ a1_a A-_-5-a
_A-_-5-A a1_-1 XMDC_A1a or XMDC-A1a or XMDC_A1-a XMDC_A_1_a_ _A-1-A_
'''

def find_this(text):
matches = re.findall(r'([_-]?[a-z][_-]?[1-9][_-]?[a-z][_-]?)', text, re.I)
records = [m.replace('-', '').replace('_', '') for m in matches]
print records

find_this(s)

输出

['A1a', 'A1a', 'A1a', 'A1a', 'A1a', 'A1A', 'a1a', 'A1a', 'A1a', 'A1a', 'A1a', 'A1A']

参见working demo

关于Python正则表达式查找字母数字字母指定的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19456942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com