字符串的python正则表达式

字符串的python正则表达式,python,regex,Python,Regex,考虑一下这个字符串 prison break: proof of innocence (2006) {abduction (#1.10)} 我只是想知道字符串中是否有(#浮点值)} 我尝试了一些正则表达式,比如 re.search('\(\#+\f+\)\}',xyz) 及 不过没什么用…有人能在这里给我提些建议吗试试r'\(\d+\.\d+\)\} (,),和}都是特殊的元字符,这就是为什么它们前面有\,所以它们是按字面匹配的 您还需要在右边的元素中应用+。这里它附加到\d——数字的简写

考虑一下这个字符串

prison break: proof of innocence (2006) {abduction (#1.10)}
我只是想知道字符串中是否有
(#浮点值)}

我尝试了一些正则表达式,比如

re.search('\(\#+\f+\)\}',xyz) 

不过没什么用…有人能在这里给我提些建议吗

试试
r'\(\d+\.\d+\)\}

}
都是特殊的元字符,这就是为什么它们前面有
\
,所以它们是按字面匹配的

您还需要在右边的元素中应用
+
。这里它附加到
\d
——数字的简写——意味着只有数字可以出现一次或多次

使用
r'raw string literals'
可以更容易地使用正则表达式模式,因为您不必过多地转义反斜杠

另见

变化 <> P>为了教学目的,让我们考虑一些变化。这将显示正则表达式的一些基本特性。让我们首先考虑一种尝试模式:

\(\#+(\d\.\d)+\)\}
为了便于阅读,我们将各部分隔开:

\( \#+ ( \d \. \d )+ \) \}
       \__________/
         this is one group, repeated with +
因此,这种模式符合:

  • 文本
    ,后跟一个或多个
    #
  • 后跟一个或多个:
    • 数字、文字点和数字
  • 后跟文字
    )}
因此,模式将匹配,例如
(####1.23.45.6)}
()。显然,这不是我们想要的模式

现在,让我们尝试修改解决方案模式,并说,也许我们还希望只允许一个数字序列,而不允许后面的句点和后面的数字。我们可以通过将该部分分组
(…)
,并使用
将其设置为可选

BEFORE
\(#\d+\.\d+\)\}
      \___/
      let's make this optional! (…)?

AFTER
\(#\d+(\.\d+)?\)\}
现在模式匹配,例如
(#1.23)}
,以及
(#666)}
()

工具书类
  • -,
为了安全起见,请使用“转义所有内容”并使用原始文字语法:

>>> s='prison break: proof of innocence (2006) {abduction (#1.10)}'
>>> re.search(r'\(\#\d+\.\d+\)\}', s)
<_sre.SRE_Match object at 0xec950>
>>> _.group()
'(#1.10)}'
>>> 
>>s='越狱:无罪证明(2006){绑架(#1.10)}'
>>>重新搜索(r'\(\\\d+\.\d+\)\},s)
>>>(组)
'(#1.10)}'
>>> 

这假设“浮点值”的意思是“一个或多个数字、一个点、一个或多个数字”,并且不能容忍其他浮点语法变化、多个哈希(从RE模式中可以看出您希望支持但在Q的文本中没有提及)、相关部分之间的任意空白(同样,从你的Q中不清楚你是否需要它),…--有些问题可以很容易地调整,其他的“不太可能”(例如,很难猜测你想要支持什么样的FP语法变体).

您不必逃逸
#
@Null,如果您逃逸每个您想要逐字匹配的非字母数字字符,您将永远不会出错,不会迫使代码的读者猜测哪些特殊字符具有特殊含义,哪些不具有特殊含义,并且如果将来的REs版本添加了一些功能,将继续存在;没有补偿避免全部转义的优点。类似地,
r'…'
语法:只有当您使用的某些'\'序列是字符串转义时,才需要它,但使用它总是一个更好的主意-避免您在任何情况下进行深入思考,帮助读者,等等-没有任何缺点。@Alex我发现过多的反斜杠会导致错误正则表达式更难阅读。我想我从来没有见过正则表达式风格需要转义的地方。
你有吗,Polygene润滑剂?@Null:
/x
模式下成为一个元字符(又称注释、忽略模式空格、冗余、PCRE扩展…为什么每个风格都必须为这个模式发明自己的名称?).无论如何,我们的想法是避开它们,因为你不知道哪一个有特殊的含义。不过,不用担心;对于每一个建议n00bs避开一切的老手来说,总是有十几个抱怨所有无用的反斜杠,所以它不会持续很长时间。。)
>>> s='prison break: proof of innocence (2006) {abduction (#1.10)}'
>>> re.search(r'\(\#\d+\.\d+\)\}', s)
<_sre.SRE_Match object at 0xec950>
>>> _.group()
'(#1.10)}'
>>>