使用Ruby。这是一个示例文本:
乘车费用为4英镑。值得拥有一个能够点亮灯光的火炬 这里描述的大多数墓葬通常对游客开放。他们是 按进入网站时找到的顺序列出。该 关于坟墓,他们的装饰和坟墓的最佳信息来源 历史是Theban Mapping Project (www.thebanmappingproject.com)。拉美西斯七世(KV 1)附近的主要 入口是拉美西斯七世(公元前1136-1129)的小型未完工的坟墓。 只有44.3米长 - 由于拉美西斯的突然而成为皇家坟墓的缩影 死亡 - 它包括一个走廊,一个墓室和一个未完成的人 第三室。
我尝试了以下内容,但它与下一个大写字母一起匹配:
/\.[A-Z]/ #=> matches .T instead of .
我想:
.
中的句点.Tomb
- 后跟大写字母的任何点,.3
中的44.3m
不匹配,.t
中的.c
或www.thebanmappingproject.com
不匹配。答案 0 :(得分:1)
/(\.)(?=[A-Z])/g
它将匹配任何点后跟大写字母
答案 1 :(得分:1)
如果text
是您的字符串,
text.scan(/(\.)[A-Z]/).flatten
#=> [".", "."]
返回您要求的内容,但这真的是您想要的吗?可能最好写
text.scan(/\.[A-Z]/)
#=> [".M", ".T"]
或
text.gsub(/\.(?=[A-Z])/).with_object([]) { |_,a| a << Regexp.last_match.offset(0).first }
#=> [75, 342]
text[75, 20]
#=> ".Most tombs describe"
text[342, 20]
#=> ".Tomb of Ramses VII "
(20
是arbritary)。
这里使用String#gsub很有意思。我使用了gsub
,因为如果没有阻止,它会返回一个枚举数,我需要使用Enumerator#with_object进行链接。 gsub
返回的值实际上已被丢弃。由于没有块的String#scan没有返回枚举器,要使用它我不得不写:
a = []
text.scan(/\.(?=[A-Z])/) { a << Regexp.last_match.offset(0).first }
a #=> [75, 342]
这几乎不会成为世界末日。
答案 2 :(得分:0)
你非常接近。你只需要一个括号来匹配点和全局修饰符g来匹配每个点后跟一个大写字母,而不仅仅是第一个:
/(\.)[A-Z]/g