检查多个正则表达式模式

2024-06-08 14:31:23 发布

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

我正在用计算器计算英尺和英寸。我目前有一个程序,但到目前为止,我只能让它工作,如果你输入完整的测量(即4'-0“而不是只有4'或0'-6“而不是只有6”)。我想能够有它检查对几个模式,以便能够输入只是英尺,英寸,一英寸的分数,或以上的组合。你知道吗

我已经尝试过在一个变量中使用所有不同的模式,但是我必须缺少一些东西,以便能够通过变量进行解析以找到正确的模式(这一尝试在代码中被注释掉)。我发现其他代码使用这个方法,并试图复制它为我工作,但没有运气。我也尝试过让每个模式都有自己的变量,但是我不确定如何检查每个模式并返回是否匹配。也许我想得太多了,这很容易,但我被难住了。你知道吗

很抱歉发布了一个指向整个代码的链接,但我认为您可以更容易地看到和使用我正在使用的内容,而不仅仅是代码片段。提前谢谢你的帮助。你知道吗

代码链接:

https://repl.it/repls/PrestigiousKeyMemorypool


Tags: 方法代码https程序内容链接模式it
1条回答
网友
1楼 · 发布于 2024-06-08 14:31:23

尝试使用命名组并使每个部分都是可选的(包括破折号):

regex = re.compile(r'(?P<feet>[0-9]+\')?\-?(?P<inches>[0-9]+")?')

并修改以下函数,即可设置。你知道吗

def ftbreakdown(*args):
  search = regex.search(*args)
  print(search)
  feetsearch = search.group('feet')
  feet = int(feetsearch.split("'")[0]) if feetsearch is not None else 0
  return feet

def inbreakdown(*args):
  search = regex.search(*args)
  print(search)
  if search is None:
    inches = 0
  else:
    inchsearch = search.group('inches')
    inches = int(inchsearch.split('"')[0]) if inchsearch is not None else 0
  # print(inches)
  return inches

这是一种既快又脏的方法,但它是有效的。显然,你可以进一步优化。你知道吗

样本运行

Python 3.6.1 (default, Dec 2015, 13:05:11)
[GCC 4.8.2] on linux
Enter length: 4'-2"
Choose operation: +
Enter length: 6"
<_sre.SRE_Match object; span=(0, 5), match='4\'-2"'>
<_sre.SRE_Match object; span=(0, 2), match='6"'>
<_sre.SRE_Match object; span=(0, 5), match='4\'-2"'>
<_sre.SRE_Match object; span=(0, 2), match='6"'>
4'-8"
Choose operation:

相关问题 更多 >