首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PetitParser在Smalltalk字符串中查找标记

使用PetitParser在Smalltalk字符串中查找标记
EN

Stack Overflow用户
提问于 2011-10-18 15:15:10
回答 4查看 1K关注 0票数 7

我想要解析

代码语言:javascript
复制
'This,is,an,example,text'

就像在findTokens中

代码语言:javascript
复制
'This,is,an,example,text' findTokens: $, 
an OrderedCollection('This' 'is' 'an' 'example' 'text')

但是我不知道如何使用PetitParser,delimitedBy:和separatedBy:没有帮助我试过了

代码语言:javascript
复制
( #any asParser delimitedBy: $, asParser ) plus flatten parse:  'This,is,an,example,text'

但显然不起作用

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-10-18 22:42:51

当我想要排除某些东西时,我总是在PetitParser中使用这种模式。只需将"what I'm looking for“或"what I want to exclude”(无论哪个更容易描述)定义为解析器,然后否定它,并根据需要进行处理。

代码语言:javascript
复制
s := 'This,is,an,example,text'.
separator := $, asParser ==> [ :n | nil ].
token := separator negate plus flatten.
p := (token separatedBy: separator) ==> [ :nodes |
    nodes copyWithout: nil ].
p parse: s.
票数 1
EN

Stack Overflow用户

发布于 2012-09-04 17:24:13

您可以将delimitedBy:withoutSeparators结合使用

代码语言:javascript
复制
|text parser|

text := 'This,is,an,example,text'.
parser := (#word asParser plus flatten delimitedBy: ($, asParser)) withoutSeparators.

parser parse: text

似乎是对PetitParser的最新改进。

票数 3
EN

Stack Overflow用户

发布于 2011-10-18 17:03:20

a #delimitedBy: b扩展到了a , (b , a) star,所以你的解析器会说“给我一个逗号分隔的字符”。

它的可读性不是很好,但它可以满足您的需要:

代码语言:javascript
复制
((($, asParser not , #any asParser) ==> [:nodes | nodes second])
  plus flatten delimitedBy: $, asParser

第一个子句说“解析任何不是逗号的东西”。因此,给定'12,24',您将获得#('12' $, '24')

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7803675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档