正则表达式拉大写单词和时间戳?

时间:2016-06-02 10:57:47

标签: regex

我对Regex很缺乏经验,即使我想自己解决这个问题,我也不确定如何开始。

我想开发一个Ruby扫描Regex,它接受一个字符串并返回一个字符串数组。正则表达式应该识别股票市场的股票代码,如果它们跟随股票代码,还包括短时间戳(包括-1d,-1m,-1y)。

举个例子:

How is AMZN-1d today and what about MSFT?

会回来......

["AMZN-1d", "MSFT"]

此外,如果这可以扩展到以下正则表达式,它获取股票代码,但不是时间戳 - 这将是辉煌的!

scan(/[\b\$]?[A-Z]{1,}\.[A-Z]+\b|[\b\$]?[A-Z]{2,}\b|\$[A-Z]{1,}\b|\b[A-Z]{1,}\$/) 

2 个答案:

答案 0 :(得分:0)

您的规格不完整。因此无法给出完全有效的答案。

你可以尝试使用这样的东西。

/([A-Z]{2,}-\d[dmy])|([A-Z]{2,})/g

我假设股票代码符号的最小长度为两个字符。

答案 1 :(得分:0)

您可以使用

/\b\p{Lu}{2,}(?:-\d\p{L}+\b)?/

请参阅regex demo

模式匹配:

  • \b - 字边界
  • \p{Lu}{2,} - 2个或更多大写字母
  • (?:-\d\p{L}+\b)? - 1个或0个序列(由于?量词)
    • - - 连字符
    • \d - 一个数字(添加+量词以匹配1位或更多位数,如果超过1位数)
    • \p{L}+ - 一个或多个字母

如果您只需要匹配ASCII字符,请将\d替换为[0-9],将\p{L}替换为[a-zA-Z],将\p{Lu}替换为[A-Z]。< / p>