正则表达式(按顺序查找匹配字符)

2024-04-26 14:01:04 发布

您现在位置:Python中文网/ 问答频道 /正文

假设我有以下字符串变量:

welcome = "StackExchange 2016"
string_to_find = "Sx2016"

这里,我想使用正则表达式在welcome中找到字符串string_to_find。我想看看string_to_find中的每个字符是否与welcome中的顺序相同。你知道吗

例如,这个表达式的计算结果是True,因为在这两个字符串中,'S''x'之前,在'2'之前,'2'0之前,等等。你知道吗

有没有一种简单的方法可以使用regex来实现这一点?你知道吗


Tags: to方法字符串truestring顺序表达式find
3条回答

你的回答很琐碎。.*字符组合匹配0个或多个字符。为了你的目的,你会把它放在所有角色之间。如S.*x.*2.*0.*1.*6。如果此模式匹配,则字符串将服从您的条件。他说

对于一般字符串,您需要在字符之间插入.*模式,同时还要注意转义特殊字符,如文字点、星号等,否则可能由regex解释。他说

.使用通配符匹配,与*重复:

expression = 'S.*x.*2.*0.*1.*6'

{}也可以用这个表达式来汇编:

expression = '.*'.join('Sx2016')

或者只是在没有正则表达式的情况下找到它,检查string_to_find中每个welcome字符的位置是否按升序进行,通过捕获ValueError来处理string_to_find中的字符不在welcome中的情况:

>>> welcome = "StackExchange 2016"
>>> string_to_find = "Sx2016"
>>> try:
...     result = [welcome.index(c) for c in string_to_find]
... except ValueError:
...     result = None
...
>>> print(result and result == sorted(result))
True

此功能可能适合您的需要

import re
def check_string(text, pattern):
    return re.match('.*'.join(pattern), text)

'.*'.join(pattern)创建一个模式,将所有字符用'.*'分隔。例如

>> ".*".join("Sx2016")
'S.*x.*2.*0.*1.*6'

相关问题 更多 >