我尝试使用FastParse库,但是,我不确定那是我想要做的正确的库。
在我的测试中,我正在寻找一个'数据'放在文本段落的中间,文字是这样的:
INTEL SSD 180 GB Serie 540s Interfaccia Sata III 6 Gb / s 2.5"
我试图抓住价值" 180 GB"但是,在不同的意图之后,我不确定它是否可能。
一些代码:
lazy val spaceSep = "\t" | " " | "\r" | "\n" | "\u000C"
val digits = P(CharIn('0' to '9').rep(1).!).map(_.toInt)
lazy val GBSymbol = P( IgnoreCase("gb") | IgnoreCase("gigabyte"))
lazy val GB = P( AnyChar.rep ~ digits.! ~ spaceSep.rep ~ GBSymbol)
testFastParse.GB.parse("INTEL SSD 180 GB Serie 540s Interfaccia Sata III 6 Gb / s 2.5\"")
最后一个错误"是scala.MatchError:失败(CharIn(" 0123456789"):1:63 ..."")(类fastparse.core) .Parsed $失败)"
任何人都可以帮助我吗? 提前谢谢你
答案 0 :(得分:2)
AnyChar.rep
无法在此处使用,因为从ALPHA
开始时,无法回溯。如果始终以 val spaceSep = P("\t" | " " | "\r" | "\n" | "\u000C")
val digits: P[Int] = P(CharIn('0' to '9').rep(1).!).map(_.toInt)
val GBSymbol = P(IgnoreCase("gb") | IgnoreCase("gigabyte"))
val desc = P((CharIn('A' to 'Z') | CharIn('a' to 'z')).rep)
val GB: P[Int] = P(desc.rep(sep = spaceSep) ~ digits ~ spaceSep.? ~ GBSymbol ~ AnyChar.rep)
GB.parse("INTEL SSD 180 gigabyte Serie 540s Interfaccia Sata III 6 Gb / s 2.5") match {
case Parsed.Success(value, _) => println(value)
case Parsed.Failure(_, _, detail) => println(detail)
}
开头,也许你可以这样做:
digits.!
并且还需要调出digits
,因为它已经被<script type="text/javascript">
function getRandomInt(min, max) {
return Math.floor(Math.random() * (max - min)) + min;
} //The maximum is exclusive and the minimum is inclusive
$(document).ready(function() {
$("#random-button").on("click", function() {
var randomNumber = getRandomInt(100000000, 999999999);
$("#random-number").html(randomNumber);
});
</script>
解析器捕获了。