python regex:只将字符串与ch的一个实例匹配

2024-04-29 11:12:49 发布

您现在位置:Python中文网/ 问答频道 /正文

假设有两个字符串:

$1 off delicious ham.
$1 off delicious $5 ham.

在Python中,当字符串中只有一个$时,是否可以有一个匹配的regex?一、 我想在第一个短语上重新匹配,但在第二个短语上不匹配。我试过这样的方法:

re.search(r"\$[0-9]+.*!(\$)","$1 off delicious $5 ham.")

…说“在$后面跟除另一$之外的任何内容匹配。”在$示例上没有匹配,但在$示例上也没有匹配。

提前谢谢!

检查的简单试验方法:

def test(r):
  s = ("$1 off $5 delicious ham","$1 off any delicious ham")    
  for x in s:
    print x
    print re.search(r,x,re.I)
    print ""

Tags: 方法字符串testre示例内容forsearch
3条回答
>>> '$1 off delicious $5 ham.'.count('$')
2
>>> '$1 off delicious ham.'.count('$')
1
>>> import re
>>> onedollar = re.compile(r'^[^\$]*\$[^\$]*$')
>>> onedollar.match('$1 off delicious ham.')
<_sre.SRE_Match object at 0x7fe253c9c4a8>
>>> onedollar.match('$1 off delicious $5 ham.')
>>>

regexp的分解:
^在字符串开始处定位
[^\$]*零个或多个不是$
\$匹配美元符号
[^\$]*零个或多个不是$
$在字符串末尾定位

要使用字符类[^]补码来匹配除$以外的任何字符:

re.match(r"\$[0-9]+[^\$]*$","$1 off delicious $5 ham.")

与原件的更改如下:

  1. .*替换为[^\$]*。新术语[^\$]表示$以外的任何字符
  2. $附加到字符串。强制匹配扩展到字符串的结尾。
  3. re.search替换为re.match。匹配整个字符串,而不是它的任何子集。

相关问题 更多 >