【问题标题】:One single regular expression to match multiple alphanumeric words from 15 to 20 characters一个正则表达式匹配多个 15 到 20 个字符的字母数字单词
【发布时间】:2015-09-09 19:58:37
【问题描述】:

我需要在一个大字符串中找到所有包含 15 到 20 个字符的单词。而且我想避免在结尾处用其他东西长篇大论(例如1234567890abcdef@asdf.com)。我不希望那是结果,只有文字。现在我正在使用空格作为标记来拆分字符串,并且对于每个单词我都应用以下正则表达式:

^[a-zA-Z0-9]{15,20}$

有没有机会使用一个正则表达式来做这两件事?

我正在使用 C#。

好例子:

  • 1234567890abcdeg
  • qwertyuiopasdfgh
  • 1234567890abcdeg,(抓住它但删除“,”)

要避免的示例:1234567890abcdeg@gmail.com

【问题讨论】:

  • 你对“单词”的定义是什么?
  • 这是什么编程语言?
  • 提供更多匹配和不匹配的样本。
  • 我添加了额外的信息。
  • 你试过\b[a-zA-Z0-9]{15,20}\b吗?

标签: c# regex


【解决方案1】:

不要使用开始/结束锚点 (^/$),而是使用单词分隔符 (\b):

\b[a-zA-Z0-9]{15,20}(?=[\s,]|$)

我使用(?=[\s,]|$) 而不是结束分隔符来强制使用空格字符或逗号或字符串的结尾。根据需要展开。
如果需要,您可能希望对第一个 \b 执行同样的操作,例如:(?<=\s|^)

【讨论】:

  • @Francisco 立即尝试。
【解决方案2】:

通常,您会在字母数字前后使用word boundaries (\b):

\b[a-zA-Z0-9]{15,20}\b

但是,有一个小细节需要考虑:uderscores ("_") 也被视为单词字符。以前的正则表达式与以下文本不匹配:

12345678901234567_

为了避免这种情况,您可以检查它的前后是否有\b 或“_”以及lookarounds

正则表达式:

(?<=\b|_)[a-zA-Z0-9]{15,20}(?=\b|_)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-16
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    相关资源
    最近更新 更多