首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >检查多个正则表达式模式

检查多个正则表达式模式
EN

Stack Overflow用户
提问于 2019-02-19 03:39:03
回答 1查看 57关注 0票数 0

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

我曾尝试在一个变量中包含所有不同的模式,但我肯定遗漏了一些东西,以便能够解析该变量以找到正确的模式(此尝试在代码中被注释掉)。我找到了其他使用这种方法的代码,并试图复制它来为我工作,但没有成功。我还尝试让每个模式都有自己的变量,但是我不确定如何检查每个模式,并返回它是否匹配。也许我想太多了,这很容易,但我被难住了。

很抱歉发布了整个代码的链接,但我认为这样更容易让您能够看到和使用我正在处理的内容,而不仅仅是代码片段。提前感谢您的帮助。

代码链接:

https://repl.it/repls/PrestigiousKeyMemorypool

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-19 03:55:03

尝试使用命名组并将每个零件设置为可选(包括破折号):

代码语言:javascript
复制
regex = re.compile(r'(?P<feet>[0-9]+\')?\-?(?P<inches>[0-9]+")?')

并修改以下函数,您将被设置。

代码语言:javascript
复制
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

这是快速和肮脏的方式,但它是有效的。显然,您可以进一步推广这一点。

运行的示例

代码语言:javascript
复制
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:
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54754229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档