regex 匹配空字符串或给定集合中的字符串的正则表达式

amrnrhlw  于 2023-05-19  发布在  其他
关注(0)|答案(3)|浏览(99)

我想匹配字符串"->""<==""..."中的任意一个“direction”(">""<")。当字符串不包含方向时,我想匹配""。更准确地说,等价的Python表达式是:

">" if ">" in s else ("<" if "<" in s else "")

我首先提出了这个简单的正则表达式:

re.search(r"[<>]|", s)[0]

...但只要方向不在第一个位置,它就计算为""。你会怎么做

xpcnnkqh

xpcnnkqh1#

Andrej Kesely解决方案的一个简单版本:

re.search('<|>|$', s)[0]
ecfsfe2w

ecfsfe2w2#

如果您需要纯re解决方案(regex101):

import re

test_cases = [
    "->", "<==", "..."
]

for t in test_cases:
    print(re.search('(?=[<>]).|$', t)[0])

图纸:

>
<

这将匹配第一个<>字符串或字符串$的结尾(然后返回空字符串''
编辑:简化了正则表达式,谢谢@InSync

rjjhvcjd

rjjhvcjd3#

如果第一个字符不是<>,则此正则表达式[<>]|返回“”的原因是,在这种情况下,交替始终匹配位置,为www.example.com返回零长度匹配re.search
除了编写if/else语句或正则表达式,你还可以使用next(),它可以返回一个默认值,并列出你想要在数组中匹配的字符串:

test_str = "this is a test string with > and <"
items = ["<", ">"]
item = next((i for i in items if i in test_str), "")
print(item)

相关问题