python 正则表达式:匹配仅包含一个字符实例的字符串

9 投票
5 回答
19876 浏览
提问于 2025-04-16 00:44

假设有两个字符串:

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

在Python中,我能不能写一个正则表达式,来匹配字符串中只有一个$的情况?也就是说,我想让这个正则表达式能匹配第一个字符串,但不匹配第二个。 我试过类似这样的写法:

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 ""

5 个回答

2

你想用一个字符类的补集 [^] 来匹配除了 $ 以外的任何字符:

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

你原来的内容做了以下几个修改:

  1. .* 被替换成了 [^\$]*。新的表达式 [^\$] 的意思是匹配任何不是 $ 的字符。
  2. 在字符串后面加上了 $。这样做是为了确保匹配到字符串的结尾。
  3. re.search 被替换成了 re.match。这样可以匹配整个字符串,而不是它的某一部分。
7

在编程中,有时候我们会遇到一些问题,想要找到解决办法。比如说,有人可能在使用某个工具或库的时候,遇到了错误或者不明白的地方。这时候,大家会去一个叫StackOverflow的网站上提问,那里有很多程序员会分享他们的经验和解决方案。

在这个网站上,用户可以把自己的问题写出来,其他人可以看到并给出建议或解决办法。这样一来,大家就可以互相帮助,解决问题。

有时候,问题的描述可能会比较复杂,但只要仔细阅读,通常都能找到有用的信息。记得在提问的时候,尽量把问题描述清楚,这样别人才能更好地理解并帮助你。

>>> '$1 off delicious $5 ham.'.count('$')
2
>>> '$1 off delicious ham.'.count('$')
1
12
>>> 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.')
>>>

正则表达式的分解:
^ 表示字符串的开始
[^\$]* 表示零个或多个不是 $ 的字符
\$ 表示匹配一个美元符号
[^\$]* 再次表示零个或多个不是 $ 的字符
$ 表示字符串的结束

撰写回答