Python 仅在一行中从字符串中提取字符

Python 仅在一行中从字符串中提取字符,python,regex,Python,Regex,根据反馈进行编辑: 通常,当我想提取字符串的一部分时,我会这样做: match = re.search('ma(\w)ch', 'match') if match : whatIWant = match.group(1) 这是三行。我更喜欢这样做: if re.search('ma(\w)ch', 'match'): whatIWant = $_.group(1) 至少有两行。甚至更好 whatIWant = re.search('ma(\w)ch', 'match').group(

根据反馈进行编辑: 通常,当我想提取字符串的一部分时,我会这样做:

match = re.search('ma(\w)ch', 'match')
if match :
  whatIWant = match.group(1)
这是三行。我更喜欢这样做:

if re.search('ma(\w)ch', 'match'):
  whatIWant = $_.group(1)
至少有两行。甚至更好

whatIWant = re.search('ma(\w)ch', 'match').group(1)
理想情况下,能够做到这一点会很好,即使是在列表中。字符串列表。这需要一行。可能吗

这是我现在正在编写的实际代码。但我对一般正则表达式的缩短也感兴趣。这就是为什么我给出了上面的一般例子

observeStr = ['ch1', 'dq_23']
dqMatches = ['dq_*(\d+)', 'tx_*(\d+)', 'rx_*(\d+)']
dword = [re.search(dqMatch, el.lower()) for el in observeStr for dqMatch in dqMatches if re.search(dqMatch, el.lower())]
if len(dword) == 1:
  observeStr += ['dword {0}'.format(int(dword[0].group(1)) / 32)]

你的例子可以归结为

't' if 't' in 'match' else None
假设在没有匹配项的情况下,
None
是您想要的。事实上,如果您只需要挑选字符,那么您可能根本不需要
re

在更一般的情况下,您确实需要
re
,如果您想将其减少到两行,您可以这样做

match = re.search('ma(t)ch', 'match')
what_i_want = match.group(1) if match else None
在不久的将来,您将在首选解决方案中获得一些接近您所希望的东西,正如您将示例作为具体用例所提到的:

举个例子:Guido发现了几个例子,程序员为了保存一行代码而重复一个子表达式,从而减慢了程序的速度,例如,代替编写:

match = re.match(data)
group = match.group(1) if match else None
他们会写道:

group = re.match(data).group(1) if re.match(data) else None
该功能将在Python3.8中提供,您可以使用它编写示例

if match := re.search('ma(t)ch', 'match'):
    what_i_want = match.group(1)

在Python3.8中有赋值表达式:如果匹配失败,您希望在
whatIWant
中是什么<代码>无?以前有什么?或者您希望引发异常?最后一个已经发生了。首先,您可以编写一个简单的包装函数来实现这一点。几乎任何你想要的东西都很容易,但是如果你不知道你想要什么,那是不可能的。另外,“字符串列表”指的是什么<代码>搜索永远不会返回任何内容的列表。您希望有多个字符串?罚款中是否有很多匹配项,因此您正在寻找
re.findall
re.finditer
?或者别的什么?你是对的,我的例子允许一个更简单的表达式。我应该给出的示例是:
match=re.search('ma(\w)ch','match')
我试图捕获的具有未知值的案例。非常感谢。