【问题标题】:python detect if string contains junk [closed]python检测字符串是否包含垃圾[关闭]
【发布时间】:2014-10-05 14:19:49
【问题描述】:

我想使用 python 在变量字符串中检测它是否包含以下内容之外的任何其他内容,即 800m2,

例如

如果 string = "820m2 bla bla",则 boolean = false, 但是如果 string = "340m2" 那么 boolean 是 true

【问题讨论】:

  • 您是在检查820m2 是否在字符串中,或​​者究竟是什么?
  • 这里真的不清楚什么是真假。您要匹配的模式是什么? 3个数字,一个字母和一个数字? 3位数字和特定字符串“m2”?什么?
  • 投票结束,因为不清楚你在问什么
  • 我相信如果字符串包含 '820m2' 和 True 在任何其他情况下,他要求将变量设置为 False。
  • @iwin,从问题中完全不清楚,它不应该是一个猜谜游戏来弄清楚OP想要什么。

标签: python filter


【解决方案1】:

你可以使用正则表达式r'^\d+m2$'re模块)来匹配这个字符串模式:

>>> pattern = re.compile(r'^\d+m2$')  # assuming that m2 == square meter
>>> bool(pattern.search("340m2"))
True
>>> bool(pattern.search("820m2 bla bla"))
False

正则表达式解释:

  • ^ 表示“以”开头
  • \d 表示“数字”
  • + 表示“一个或多个”(在本例中:“一个或多个数字”)
  • m2 字面意思是“m2”
  • $ 表示“以”结尾

因此,我们得到了表达式:“匹配以一位或多位数字开头并以 'm2' 结尾的字符串”。

【讨论】:

  • 一针见血,
  • 如果我想搜索 340$ 而不是 m2 请怎么办
  • @Ossama pattern = re.compile(r'^\d+\$$')
  • 使用re.matchre.RegexObject.match时不需要指定^,因为它与search不同,匹配字符串的开头。
  • 是的,你是对的@falsetru。我总是忘记什么方法不需要^。修复了使用.search() 而不是.match() 的答案,因为我更喜欢“显式”正则表达式。
【解决方案2】:

使用正则表达式:

>>> import re
>>> bool(re.search('^\d+m\d+$', "820m2 bla bla"))
False
>>> bool(re.search('^\d+m\d+$', "340m2"))
True

\d 匹配任何数字字符。 \d+ 匹配一位或多位数字。

^ 匹配字符串的开头,$ 匹配字符串的末尾。

【讨论】:

    猜你喜欢
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    相关资源
    最近更新 更多