【发布时间】:2021-07-12 14:14:10
【问题描述】:
在我的示例中,所有年龄都在10 和99 之间。我想找到变量“age”的所有实例都是> 或<,而不是两位数。我需要知道等号和两位数。如果它们对应于不同的变量(例如,身高或体重),我不想要等号和两位数。为简单起见,所有年龄、身高和体重都是两位数。没有单位。
sample_text = "age > 10 but can be > 20 or > 22 - if the height is > 60 then age can be > 30, otherwise it must be < 35"
我正在寻找的输出是age_list,看起来像[(">", "10"), (">", "20"), (">", "22"), (">", "30"), ("<", "35)]。列表应该可以是任意长度。
当格式总是“年龄”后跟符号后跟数字时,很容易得到它们。我使用了下面的代码,它提取了[(">", "10"), (">", "30")],但我无法获得其他数字——例如,显然与年龄相关的20 和22。我需要得到这些,但要避免 60 与身高挂钩(如果有重量,任何与体重挂钩的数字)。
re.findall("age\s*[a-zA-Z\s]*(>|<)\s*(\d\d)", sample_text)
当格式为“年龄符号数字或某些符号数字”时,我有使用re.search 的变通方法,但如果有一堆符号和数字前面没有“年龄”,则变通方法会失败 -例如,“年龄必须 > 20 或者如果这个则 > 24 或者如果那个则 > 30...”
【问题讨论】:
-
“年龄”、“身高”和“体重”是唯一可能的变量吗?
-
在这个例子中是的。我可以想象其他项目有更多复杂的变量(即,我不想捕获数字的变量)。但我希望/认为同样的原则也适用。
-
好的,这绝对有帮助!但是,如果您需要涵盖诸如“年龄必须> 20,或者如果此年龄> 24”之类的内容,我认为正则表达式不会成功。你需要一个完整的自然语言处理/理解管道..
标签: python regex regex-group