regex 如何在python re中结合合并正则表达式模式查找和位置查找?

w9apscun  于 2023-10-22  发布在  Python
关注(0)|答案(2)|浏览(140)

我是正则表达式的新手,所以请容忍我。假设我有两个字符串:

string_1 = 'aAbcDeF801020J00100870'
string_2 = 'aAbF801020J00100870'

使用re模块,我可以匹配字符串的非数字第一部分

pattern = re.compile("^[aA-zZ]*")

print(pattern.match(string_1).group(0))
print(pattern.match(string_2).group(0))

>> aAbcDeF
>> aAbF

但是我怎样才能得到遵循匹配模式的6个数字字符的序列呢?即

801020

尝试以下操作:

pattern = re.compile("^[aA-zZ]*......")

print(pattern.match(string_1).group(0))
print(pattern.match(string_2).group(0))

给了我:

>> aAbcDeF801020
>> aAbF801020

离得更近,但还差得远我更喜欢在一个单一的模式查找与。在我最后一次尝试的最后一次尝试中,
Thanks in advance

wgx48brx

wgx48brx1#

您可以尝试:

^([aA-zZ]*)(\d{6})

就像这样:

string_1 = 'aAbcDeF801020J00100870'
string_2 = 'aAbF801020J00100870'

pattern = re.compile("^([aA-zZ]*)(\d{6})")

print("Full match:", pattern.match(string_1).group(0))

print(pattern.match(string_1).group(1))
print(pattern.match(string_2).group(1))

print(pattern.match(string_1).group(2))
print(pattern.match(string_2).group(2))

给你输出:

Full match: aAbcDeF801020
aAbcDeF
aAbF
801020
801020

其中group(1)包含要匹配的文本,group(2)包含6位数字。
如果您愿意,可以使用group(0)获取文本以及6位数字

Here's a fully functioning demo at regex101.com

正如您在页面上提供的匹配信息中所看到的,找到的完全匹配是字母沿着的6位数字。

注意-另外,如果你想找到这个模式的所有次,你可以像这样使用re.findall()

string_1 = 'aAbcDeF801020J00100870'
string_2 = 'aAbF801020J00100870'

print(re.findall('([aA-zZ]*)(\d{6})', string_1))
print(re.findall('([aA-zZ]*)(\d{6})', string_2))

这将导致一个元组数组,如下所示:

[('aAbcDeF', '801020'), ('J', '001008')]
[('aAbF', '801020'), ('J', '001008')]
eyh26e7m

eyh26e7m2#

可以使用^([a-zA-Z])*([0-9]+)

pattern = re.compile("^([a-zA-Z])*([0-9]+)")

print(pattern.match(string_1).groups())
print(pattern.match(string_2).groups())

输出量:

('aAbcDeF', '801020')
('aAbF', '801020')
  • 说明 *:
^                           // asserts position at start of the string
    (                       // start of matching group 1
        [a-zA-Z]            // matches a character present in the list
        *                   // matches between zero and unlimited times (greedy)
    )                       // end of matching group 1
    (                       // start of matching group 2
        [0-9]+              // matches any number between 1 and unlimited times
    )                       // end of matching group 2

相关问题