python 正则表达式:匹配仅包含一个字符实例的字符串
假设有两个字符串:
$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.")
你原来的内容做了以下几个修改:
.*
被替换成了[^\$]*
。新的表达式[^\$]
的意思是匹配任何不是$
的字符。- 在字符串后面加上了
$
。这样做是为了确保匹配到字符串的结尾。 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.')
>>>
正则表达式的分解:
^
表示字符串的开始
[^\$]*
表示零个或多个不是 $
的字符
\$
表示匹配一个美元符号
[^\$]*
再次表示零个或多个不是 $
的字符
$
表示字符串的结束