Questions tagged «regex»

正则表达式提供了一种声明性语言来匹配字符串中的模式。它们通常用于字符串验证,解析和转换。由于正则表达式尚未完全标准化,因此带有此标签的所有问题还应包括一个标签,用于指定适用的编程语言或工具。注意:询问HTML,JSON等正则表达式往往会产生负面反应。如果有解析器,请改用它。


16
如何在python中拆分但忽略带引号的字符串中的分隔符?
我需要在分号上分割这样的字符串。但是我不想分割字符串(“或”)内的分号。我不是在解析文件;只是一个没有换行符的简单字符串。 part 1;"this is ; part 2;";'this is ; part 3';part 4;this "is ; part" 5 结果应为: 第1部分 “这是;第2部分;” '这是 ; 第三部分 第4部分 这是“一部分” 5 我想这可以用正则表达式来完成,如果不能的话;我愿意接受另一种方法。
67 python  regex 

6
如何替换每个单词中第一个出现的字符?
如何替换每个单词中第一个出现的字符? 说我有这个字符串: hello @jon i am @@here or @@@there and want some@thing in '@here" # ^ ^^ ^^^ ^ ^ 我想删除@每个单词的第一个,以便最终得到一个像这样的最终字符串: hello jon i am @here or @@there and want something in 'here # ^ ^ ^^ ^ ^ 只是为了澄清起见,“ @”字符始终在每个单词中同时出现,但可以出现在单词的开头或其他字符之间。 我设法通过使用在Delete子串中发现的正则表达式的变体(仅一次出现)来删除“ @”字符(一次出现),但是在python中连续两次出现时却没有,因此使用了负向超前和负向超前: @(?!@)(?<!@@) 查看输出: >>> s = "hello @jon …
44 python  regex 

2
有没有办法检查JS中的字符串是否是一个表情符号?
问题很简单:我有一个字符串str,如何检查str一个表情符号,是否只有一个?另外,我宁愿不使用其他库。 比赛"🍎","⛹🏿‍♂️","3️⃣"但不"🍓a","𝕒","🍌🍀" 我在寻找解决方案时遇到了麻烦,但是到目前为止,我已经尝试了一些方法: 尝试的解决方案1-玩弄长度和...运算符 我了解到,表情符号占据一个以上的字节,有些甚至占据4个字节,甚至更多……我们可以通过字符串的length属性来衡量: console.log("🍎".length); // 2 console.log("🛡️".length); // 3 console.log("⛹🏿‍♂️".length); // 6 然后我发现...运算符考虑了这一点,并正确分离了数组中的表情符号-然后,我可以查看结果数组的length属性并检测它们是否不同。 str = "⛹🏿‍♂️"; if (str.length !== [...str].length) { // is emoji? } else { // is not emoji } 但是,这不会检查其他多字节字符,例如𝕡长度为2的字符。另外,有些表情符号仍然被怪异地分开。 尝试解决方案2-正则表达式,正则表达式 当然,正则表达式是一个值得研究的问题,但我尚未找到可行的解决方案。 这个答案的正则表达式\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff]可以很好地检测字符串是否有表情符号,但是将其应用于我的情况会产生很多问题。这是我的测试: A部分-没有字符串正则表达式(^和$)的开始/结束 2A.1 str.match(regex)非常不一致,它分解了一些表情符号和其他一些无法使用的表情符号。我没有找到一种方法来找出它是否甚至包含非表情符号字符或是否包含多个表情符号: let regex = /(\u00a9|\u00ae|[\u2000-\u3300]|\ud83c[\ud000-\udfff]|\ud83d[\ud000-\udfff]|\ud83e[\ud000-\udfff])/; console.log("5️⃣".match(regex)); // [ '⃣', '⃣', …

3
re.findall('(ab | cd)',字符串)vs re.findall('(ab | cd)+',字符串)
在Python正则表达式中,我遇到了这个单一问题。您能否说明re.findall('(ab|cd)', string)和之间的区别re.findall('(ab|cd)+', string)? import re string = 'abcdla' result = re.findall('(ab|cd)', string) result2 = re.findall('(ab|cd)+', string) print(result) print(result2) 实际输出为: ['ab', 'cd'] ['cd'] 我很困惑为什么第二个结果也没有包含'ab'?
18 python  regex 

2
为什么在Ruby中将Regexp对象视为“虚假”?
Ruby有“的普遍想法感实性 ”和“ falsiness ”。 Ruby 确实有两个特定于Boolean对象的类,TrueClass并且FalseClass具有分别由特殊变量true和表示的单例实例false。 但是,真实性和虚假性不仅限于这两个类的实例,该概念是通用的,适用于Ruby中的每个对象。每个对象都是真实的或虚假的。规则很简单。特别是,只有两个对象是虚假的: nil,的一个实例,NilClass以及 false,的单例实例 FalseClass 每个其他对象都是真实的。这甚至包括在其他编程语言中被认为是虚假的对象,例如 的,Integer 0 的,Float 0.0 空,String '' 空,Array [] 空,Hash {} 这些规则是语言内置的,并且不是用户定义的。没有to_bool隐式转换或类似的东西。 这是ISO Ruby语言规范的引文: 6.6布尔值 一个对象可以分为真对象或假对象。 只有false和nil是伪造的对象。false是该类的唯一实例FalseClass(请参见15.2.6),false表达式对其进行评估(请参见11.5.4.8.3)。nil是该类的唯一实例NilClass(请参见15.2.4),一个nil-expression对其进行评估(请参见11.5.4.8.2)。 除false和nil之外的其他对象均分类为真实对象。true是该类的唯一实例TrueClass(请参见15.2.5),true表达式将对其进行评估(请参见11.5.4.8.3)。 可执行的Ruby / Spec似乎同意: it "considers a non-nil and non-boolean object in expression result as true" do if mock('x') 123 else 456 end.should …
16 regex  ruby  boolean  jruby  yarv 

1
正则表达式中的$ /和$¢有什么区别?
如标题所示,$/和之间有什么区别$¢?它们似乎总是具有相同的值: my $text = "Hello world"; $text ~~ /(\w+) { say $/.raku } (\w+)/; $text ~~ /(\w+) { say $¢.raku } (\w+)/; 两者都会导致Match对象具有相同的值。在一个之上使用一个之上的逻辑是什么?
11 regex  raku 

2
如何使用正则表达式拆分列,以将尾随的CAPS移动到单独的列中?
我正在尝试使用正则表达式拆分一列,但似乎无法正确获取拆分。我正在尝试采用所有尾随的CAPS,并将其移至单独的列中。因此,我将获得连续2-4个CAPS的所有CAPS。但是,它只是'Name'在'Team'列为空白时才离开该列。 这是我的代码: import pandas as pd url = "https://www.espn.com/nba/stats/player/_/table/offensive/sort/avgAssists/dir/desc" df = pd.read_html(url)[0].join(pd.read_html(url)[1]) df[['Name','Team']] = df['Name'].str.split('[A-Z]{2,4}', expand=True) 我要这个: print(df.head(5).to_string()) RK Name POS GP MIN PTS FGM FGA FG% 3PM 3PA 3P% FTM FTA FT% REB AST STL BLK TO DD2 TD3 PER 0 1 LeBron JamesLA SF 35 35.1 24.9 9.6 …
11 python  regex  pandas 

8
如何在C#中使用正则表达式获取某些特定单词之前的数字?
我们将使用下面的正则表达式来获取单词之前的数字。 范例: 838123 someWord 8 someWord 12 someWord (\d+)\s*someWord 但是有时数字和单词之间会出现任何东西。请参见下面的示例行。 例如: someword 12的43434 someword 2323 new someword 如何使用正则表达式获取该单词之前的确切数字? 请给我您的建议。
10 c#  .net  regex 

5
正则表达式删除R中的前导零,除非最终(或唯一)字符为零
gsub("(?<![0-9])0+", "", c("005", "0AB", "000", "0"), perl = TRUE) #> [1] "5" "AB" "" "" gsub("(^|[^0-9])0+", "\\1", c("005", "0AB", "000", "0"), perl = TRUE) #> [1] "5" "AB" "" "" 上面的正则表达式来自此SO线程,它说明了如何从R中的字符串中删除所有前导零。由于此正则表达式,“ 000”和“ 0”都转换为“”。相反,我想从字符串中删除所有前导零,但最终字符恰好为零或唯一字符为零的情况除外。 "005" would become "5" "0AB" would become "AB" "000" would become "0" "0" would become "0" 另一个SO线程解释了如何做我想做的事情,但是我认为我在使用R中的解决方案时语法不是很正确。而且我不太了解下面第一和第二解决方案之间的区别(如果他们确实有效)。 …
9 r  regex  string  gsub  stringr 

6
匹配和删除重复的字符:替换多个(3+)非连续出现的字符
我正在寻找一个regex与每个字符的第三,第四,...匹配的模式。请看下面的说明: 例如,我有以下字符串: 111aabbccxccybbzaa1 我想在第二次出现后替换所有重复的字符。输出将是: 11-aabbccx--y--z--- 到目前为止,我尝试过一些正则表达式模式: 使用以下正则表达式,我可以找到每个字符的最后一次出现: (.)(?=.*\1) 或使用此方法,我可以将其用于连续重复,但不能重复: ([a-zA-Z1-9])\1{2,}
9 python  r  regex  string 

5
如何将一小部分Markdown解析为React组件?
我有Markdown的很小一部分,还有一些我想解析为React组件的自定义html。例如,我想将以下字符串转换为: hello *asdf* *how* _are_ you !doing! today 放入以下数组: [ "hello ", <strong>asdf</strong>, " ", <strong>how</strong>, " ", <em>are</em>, " you ", <MyComponent onClick={this.action}>doing</MyComponent>, " today" ] 然后从React渲染函数返回它(React会将数组正确渲染为格式化的HTML) 基本上,我想让用户选择使用一组非常有限的Markdown来将其文本转换为样式化的组件(在某些情况下是我自己的组件!) 危险地使用SetInnerHTML是不明智的,并且我不想引入外部依赖关系,因为它们都非常繁重,并且我只需要非常基本的功能。 我目前正在做这样的事情,但是它非常脆弱,并且不能在所有情况下都起作用。我想知道是否有更好的方法: function matchStrong(result, i) { let match = result[i].match(/(^|[^\\])\*(.*)\*/); if (match) { result[i] = <strong key={"ms" + i}>{match[2]}</strong>; } return …

1
Perl regex与Raku regex,引擎的差异?
我正在尝试将针对背包问题的基于正则表达式的解决方案从Perl转换为raku。在详细Perlmonks Perl解决方案创建此正则表达式: (?<P>(?:vvvvvvvvvv)?) (?<B>(?:vv)?) (?<Y>(?:vvvv)?) (?<G>(?:vv)?) (?<R>(?:v)?) 0 (?= (?(?{ $1 })wwww|) (?(?{ $2 })w|) (?(?{ $3 })wwwwwwwwwwww|) (?(?{ $4 })ww|) (?(?{ $5 })w|) ) 与匹配vvvvvvvvvvvvvvvvvvv0wwwwwwwwwwwwwww。之后,匹配哈希%+包含要放入麻袋中的物品。 我的raku转换是: $<B> = [ [ vv ]? ] $<P> = [ [ vvvvvvvvvv ]? ] $<R> = [ [ v ]? ] $<Y> = …
9 regex  raku 

4
在大写字母或数字上分割字符串
我试图在打字稿中创建一个管道,该管道将拆分PascalCase字符串,但是如果这也可以拆分为数字,那将很好。我也希望将其分成连续的大写字母。我有这个管道,除了只在Chrome而不是Firefox中工作之外,它运作得很好,显然只有Chrome支持回溯。如何做到这一点而无需回头? transform(value: string): string { let extracted = ''; if (!value) { return extracted; } const regExSplit = value .split(new RegExp('(?<=[a-z])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][a-z])|(?<=[0-9])(?=[A-Z][a-z])|(?<=[a-zA-Z])(?=[0-9])')); for (let i = 0; i < regExSplit.length; i++) { if (i !== regExSplit.length - 1) { extracted += `${regExSplit[i]} `; } else { extracted += regExSplit[i]; } } …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.