【问题标题】:How to match Exactly two characters in a string at anywhere如何在任何地方匹配字符串中的两个字符
【发布时间】:2018-05-17 11:08:52
【问题描述】:

如何准确匹配字符串中的两个相同字符,如“4003”、“1030”。

import re
s='1030'
if re.search('0{2}',s):
print(True)

但上面的代码只匹配 '1002' 而不是 '1030'

【问题讨论】:

  • 必须使用正则表达式吗?
  • 你基本上是在做与this相反的事情。
  • 如果您能提供额外的上下文将会很有帮助,例如:1) 字符串的长度是否总是 4? 2) 是否必须是任何 2 个字符或您可以专门硬编码的字符(例如,专门用于 0 等)
  • aabb 这样的词是否符合“完全相同的 2 个字符”的条件?根据您的看法,这可以解释为“4 个相同的字符”。

标签: python regex


【解决方案1】:

假设您不必使用正则表达式:

请注意,具有 4 个字符的字符串恰好具有一对重复字符当且仅当它具有 3 个唯一字符。所以:

  • 制作一组字符
  • 检查集合中是否有 3 个不同的元素。

【讨论】:

  • 您不能使用集合来确定一个字符是否恰好出现两次。例如,ababb 都将变成 {'a', 'b'}
  • @Aran-Fey 这就是解释的重点。 “请注意,具有 4 个字符的字符串恰好具有一对重复字符当且仅当它具有 3 个唯一字符时。”。我不直接检查“一个字符恰好出现两次”,而是检查“有 3 个不同的字符”。
  • 这仍然是错误的,因为aabb 符合条件并且没有 3 个不同的字符。
  • @Aran-Fey OP 说“完全是两个相同的字符”......好吧,我猜标志关闭问题会更好。这可以用多种不同的方式来解释。
【解决方案2】:

你必须使用regex吗?只需使用.count()

>>> '1002'.count('0')
2
>>> '1030'.count('0')
2
>>> '2002200220'.count('20')
3

【讨论】:

  • OP并没有说重复字符保证为0。
  • 嗯,我也这么认为,但他们的示例硬编码了“0{2}”,所以我认为这就是他们的用例。让我们等待用户的澄清
  • 我的要求是,能够在 4 位数字中准确找到两个零。你能给我正则表达式的解决方案吗?
【解决方案3】:

这段代码被狙击只是检查 f.e.字符串number1 中的索引3 等于字符串number2 中的索引3。

 number1 = '1002'
 number2 = '1030'
 counter = 0

 for i in number1:
     if number1[counter] is number2[counter]:
        print("It's a match")
     counter = counter + 1

【讨论】:

    猜你喜欢
    • 2022-01-07
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-11
    相关资源
    最近更新 更多