正则表达式匹配字符串

时间:2015-12-31 13:23:36

标签: c# regex

以下是我将在文件导入时使用的示例单词

  • 东切斯特顿(剑桥)
  • 纽约(美国)
  • 孩子(父母)

以下是业务规则:

  1. 第一个字应至少为3个字符(l.e child)
  2. 允许空格,但如果只有空格(l.e East Chesterton)则无效
  3. 该单词的另一部分位于( someword )
  4. ( someword )是可选的
  5. 如果( someword )存在,则其最小长度为3,并且也允许使用空格。
  6. 我在某种程度上使用以下表达式实现了这一目标:

    ^[a-zA-Z ]{1,}\([a-zA-Z ]{1,}\)$
    
    1. 现在我想确保这是正确的表达方式。有没有办法检查自动化以检查多个组合以验证我的表达?

    2. 我如何实现可选部分(第4点),它是否通过(somedata)检查第一部分。

    3. 还要在'()'

      中提取数据
      \((.*?)\)
      

2 个答案:

答案 0 :(得分:2)

我想你差不多了。我试了一下。这符合您的所有要求吗?

^[a-zA-Z\s]{3,}(\([a-zA-Z\s]{3,}\))?$

https://regex101.com/r/yE9lB0/2

我把第二部分放在括号之间并在最后添加一个问号:(myoptionalexpression)?

答案 1 :(得分:0)

我看了一下这里发布的答案。

 ^[a-zA-Z\s]{3,}(\([a-zA-Z\s]{3,}\))?$

这会与

发生冲突
  • 允许空间,但如果只有空间(l.i East Chesterton)则无效

只有空格已匹配。

除此之外,描述'字符'可能有点模糊。因此,我假设单词字符\w是你的意思。 (在C sharp \w中也应包含像ü这样的unicode字符。请以Münster (Germany)为例。

新的正则表达式如下所示:

^\s*(?:\w{3,}\s*)+(?:\(\s*(?:\w{3,}\s*)+\))?\s*$

这里的例子: https://regex101.com/r/gS7kG8/3

请注意,regex101页面适用于php,python和js regex,在C#的情况下它不会给出确切的结果(例如,php中的\w显然与unicode不匹配)