【发布时间】:2014-09-19 21:51:22
【问题描述】:
我正在尝试匹配以单词、数字或罗马数字形式编写的数字。这是一堆样本
CHAPTER 1
CHAPTER 2
CHAPTER THREE
CHAPTER IV
CHAPTER TWENTY TWO
我不擅长正则表达式,这就是我目前所掌握的。
(CHAPTER (([0-9]+)|(/* words - see below */)|( /* roman - see below */)))
// words
(TWENTY|THIRTY|etc)?( |-)?(ONE|TWO|THREE|FOUR|FIVE|etc)?
// roman
(I|II|III|IV|V|etc)+
该语句捕获第 1 章、第 2 章和第 3 章,但尝试将 IV 匹配为一个单词(我猜它与 FIVE 匹配?)。二十二 根本不匹配。
有人可以帮忙吗?这是完整的正则表达式
(CHAPTER (
([0-9]+)|
((TWENTY|THIRTY)?( |-)?(ONE|TWO|THREE|FOUR|FIVE)?)|
((I|II|III|IV|V)+)
))
注意:
这样做的目的是将这些文本表示形式转换为实际的整数。在每种情况下我都有方法可以做到这一点,所以我确实需要区分各种情况
【问题讨论】:
-
您的
CHAPTER IV在这里写为CHAPTER !V,感叹号与I。如果这是您文件中的内容,则不会匹配。 -
除非需要明确写出这些,否则
CHAPTER (\w+(?: \w+)?)会更容易 -
@BobKaufman 在这种情况下这是一个错字。原文是对的
-
@hwnd 然后我需要根据它们是什么将每个案例转换为一个 int。我有工作扩展方法来做到这一点,但我需要先找到哪个是哪个
标签: c# regex numbers words roman-numerals