【问题标题】:Regular expression for extracting the city name from string pattern从字符串模式中提取城市名称的正则表达式
【发布时间】:2014-09-26 04:12:44
【问题描述】:

我想从以下示例模式中提取城市名称。

  1. 费城.json
  2. 费城
  3. 华盛顿特区.json
  4. 纽约州北部.json

只有一个正则表达式。应该适用于上述所有模式来提取城市名称。

.json 到底是可选的。只有API调用才会来,HTML请求就不会来。

预期的输出如下:

  1. 费城
  2. 费城
  3. 华盛顿特区
  4. 纽约州北部

请帮帮我。

【问题讨论】:

  • 您为实现这一目标做了哪些尝试?
  • 以下是我的示例字符串:example.com/account_lists/1050-UserName-Philadelphia.json OR example.com/account_lists/1050-UserName-Philadelphia 所以我想从中提取城市,我需要为此定义路线。华盛顿特区自“。”以来制造了一个问题。已进入网址。所以写正则表达式来允许'。是唯一的解决方案。
  • 纽约州北部?纽约州北部城市?此外,您只想删除尾随 .json?
  • 正则表达式是强制性的吗?你可以在两行没有正则表达式的情况下做到这一点..
  • 你也可以不用正则表达式。 var str = s.indexOf(".json") != -1 ? s.substr(0,s.indexOf(".json")) : s;

标签: java javascript ruby-on-rails regex


【解决方案1】:
^([A-Z][\s\w.,-]+?)(?=\.json|$)

试试这个。查看演示。

http://regex101.com/r/lS5tT3/38

【讨论】:

  • 它也匹配下划线和换行符。还有以小写字母开头的名字。 regex101.com/r/lS5tT3/37
  • @AvinashRaj 在哪里提到名字 start 只能是国会大厦?
  • 和 - 也应该采取。
  • 城市名称必须以大写字母开头,而且在他的示例中,开头也不能有小写字母。
  • @ChetanKalore -,included
【解决方案2】:

您可以尝试以下正则表达式来仅匹配开头出现的城市名称。

^[A-Z][a-z]+(?: [A-Z]\.[A-Z]\.?|(?: [A-Z][a-z]+)*)

DEMO

^[A-Z][a-z]+[ .A-Za-z]*?(?=\.json|$)

DEMO

【讨论】:

  • 阿维纳什:你非常接近,正如我所期待的那样。城市“华盛顿特区”的唯一问题使用你的正则表达式。 C 之后的点未被选中。在我们的数据库中,城市名称是“华盛顿特区”
  • @ChetanKalore 我还添加了另一个选项。
【解决方案3】:

试试这个:

没有正则表达式:

yourString = (yourString.lastIndexOf(".json") > -1)?yourString.slice(0,-5):yourString;

使用正则表达式:

yourString = yourString.replace(/\.json$/,"");

【讨论】:

  • 这仅适用于“Philadelphia.json”,不适用于“Philadelphia”
【解决方案4】:

您可以简单地执行以下操作:

String test = "Philadelphia.json";      // or any other input string
    String replaced = test.replace(".json", "");

【讨论】:

    【解决方案5】:

    如果不需要正则表达式,那么这个简单的单行函数将为您完成工作:

    function removeJson(s){
            return s.replace('.json','');
    }
    alert(removeJson("Philadelphia.json")); //"Philadelphia"
    alert(removeJson("Philadelphia"));      //"Philadelphia"
    

    将任何字符串传递给它,如果它存在,您将删除 .json。

    See the DEMO here

    【讨论】:

    • Abdul:我需要正则表达式。因为我需要定义路线,所以正则表达式是唯一的解决方案。我有以下路线定义“匹配'/account_lists/:user_id-:user_name-:market_name' => 'account_lists#key_account_show', 约束: {market_name: /[^\/]*/}, as: :account_lists_key_account_show, via: :get" 路由中的当前正则表达式 (/[^\/]*/) 如果其 JSON 请求将市场名称提取为“Philadelphia.json”,在 html 请求中工作正常并将市场名称提供为“Philadelphia”,这很好.唯一的问题是在 .json 请求中它应该给我市场名称为“Philadelphia”。
    • .json 是可选的,所以我想要的是正则表达式应该从字符串中提取城市名称。字符串可以包含空格、点、-、数字和字符,就像我在问题中给出的示例一样。
    • 您可以将完整的正则表达式传递给我的函数并从 .json 中获取字符串(它是可选的,如果它不存在,字符串不会受到伤害)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-01
    • 2020-07-24
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多