标签: string-matching

如何找到python中另一个子字符串后出现的第一个子字符串?

Python中的字符串有一个find("somestring")方法,它返回字符串中"somestring"的索引号.

但是,假设我有一个如下字符串:

"$ 5 $ 7 $ 9总费用:$ 35 $ 14"

我想找到字符串"Total Cost" 之后第一次出现'$'的索引- 我希望能够告诉python,搜索'$',从​​索引编号开始"总成本",并返回您找到的第一次出现'$'的索引号(相对于整个字符串).find()方法将返回0,并且在这种情况下rfind()将不起作用.

一种克服这种方式的方法如下:

def findStrAfterStr(myString, searchText, afterText):

    splitString = myString.split(afterText)
    myIndex = len(splitString[0]) + len(afterText) + splitString[1].find(searchText)
    return myIndex

myString = "$5   $7    $9     Total Cost: $35   $14"
searchText = "$"
afterText = "Total Cost"

findStrAfterStr(myString, searchText, afterText)
Run Code Online (Sandbox Code Playgroud)

但似乎应该有一种更简单的方法来做到这一点,我认为可能存在,我只是不知道它是什么.思考?

当我发现自己做了很多这样的事情时,这对切片特别有用:

myString[myString.find("startingSubstr"):myString.find("endingSubstr")]
Run Code Online (Sandbox Code Playgroud)

我自然希望"endingSubstr"成为"startingSubstr"之后出现的那个.

python string string-matching

5
推荐指数
1
解决办法
4782
查看次数

[R]中两列的字符串匹配

我希望匹配多个字符串标准,然后在R中对行进行子集,使用grepl查找匹配.我从另一个帖子中找到了一个很好的解决方案,其中使用了一些特定的代码(但你明白了):subset(GEMA_EO5, grepl(paste(l, collapse="|"),GEMA_EO5$RefSeq_ID))

我想知道是否有可能在两列中grepl,而不是上面的例子中的RefSeq_ID.也就是说,在grepl中通过任何其他方法.换句话说,我想在l中查找选项,而不仅仅是在一列中,而是在两列中(或者多列中).这可能吗?

例如:3列,ab和c.尽管(3,b)中的格式为"T I",但我希望选择T(第3行和第4行)的标准.它应该识别(4,a)和(3,b),因此链接到前一个问题.我希望它在列a和列b中查找,而不是一个或另一个.

    a    b     c

    A    A C   P L
    V    V B   W E E
    W    T I   P J G
    T    W P   J
Run Code Online (Sandbox Code Playgroud)

string r string-matching

5
推荐指数
1
解决办法
4640
查看次数

迭代包括空行的行

给定一个带有一些空行的多行字符串,如何迭代Lua中的行,包括空行

local s = "foo\nbar\n\njim"
for line in magiclines(s) do
  print( line=="" and "(blank)" or line)
end
--> foo
--> bar
--> (blank)
--> jim
Run Code Online (Sandbox Code Playgroud)

此代码不包含空行:

for line in string.gmatch(s,'[^\r\n]+') do print(line) end
--> foo
--> bar
--> jim
Run Code Online (Sandbox Code Playgroud)

此代码包含额外的虚假空白行:

for line in string.gmatch(s,"[^\r\n]*") do
  print( line=="" and "(blank)" or line)
end
--> foo
--> (blank)
--> bar
--> (blank)
--> (blank)
--> jim
--> (blank)
Run Code Online (Sandbox Code Playgroud)

string lua string-matching lua-patterns

5
推荐指数
1
解决办法
4859
查看次数

数组中的PHP数组搜索

$keywords = array('red', 'blue', 'yellow', 'green', 'orange', 'white');

$strings = array(
'She had a pink dress',
'I have a white chocolate',
'I have a green balloon',
'I have a chocolate shirt',
'He had a new yellow book',
'We have many blue boxes',
'I have a magenta tie');
Run Code Online (Sandbox Code Playgroud)

实际上strings阵列非常庞大(50k +条目).

什么是运行搜索和提取匹配的字符串的最佳方式

php arrays string-matching

5
推荐指数
1
解决办法
107
查看次数

如何将正则表达式用于茉莉花匹配器

我需要验证文本标签,但它包含动态部分,所以我尝试使用正则表达式,但它不起作用.

expect(aboutPage.userInterfaceText.getText()).toMatch('/- User Interface: v \d+\.\d+\.\d+/');
Run Code Online (Sandbox Code Playgroud)

我总是得到下一个错误:

- Expected '- User Interface: v 4.4.63' to match '/- User Interface: v d+.d+.d+/'.
Run Code Online (Sandbox Code Playgroud)

regex string-matching jasmine protractor

5
推荐指数
1
解决办法
8937
查看次数

当关键词是多词时,有效地搜索关键词

我需要使用python有效地匹配一个非常大的关键字列表(> 1000000).我发现一些非常好的库试图快速完成这个:

1)FlashText(https://github.com/vi3k6i5/flashtext)

2)Aho-Corasick算法等

但是我有一个特殊的要求:在我的上下文中,如果我的字符串是'XXXX是YYYY的非常好的指示',则关键字'XXXX YYYY'应该返回匹配.请注意,'XXXX YYYY'不是作为子字符串出现的,但字符串中存在XXXX和YYYY,这对我来说足够好了.

我知道如何天真地做到这一点.我正在寻找的是效率,为此更好的图书馆?

python string pattern-matching string-matching keyword-search

5
推荐指数
1
解决办法
416
查看次数

如何匹配句子中的字符串

我想检查句子中是否存在特定字符串.我为此目的使用简单的代码

subStr = 'joker'
Sent = 'Hello World I am Joker'

if subStr.lower() in Sent.lower():
    print('found')
Run Code Online (Sandbox Code Playgroud)

这是一种简单直接的方法,但当句子出现时它会失败

你好世界我是Jo ker

你好世界我是J oker

当我从PDF文件中解析句子时,会有一些不必要的空间来到这里.

解决此问题的一种简单方法是从句子中删除所有空格并查找子字符串匹配.我想知道其他人对此的想法,我应该坚持这种方法还是寻找其他一些选择.

python string string-matching python-3.x

5
推荐指数
1
解决办法
288
查看次数

在大量句子中查找 n 元语法频率

我有一组短信。让我们打电话给他们吧m1, m2, ....。消息的最大数量如下1,000,000。每条消息1024的长度都低于字符,并且全部为小写。我们还可以选择一个 n-gram s1

我需要从所有这些消息中找到所有可能的子字符串的频率。例如,假设我们只有两条消息:

m1 = a cat in a cage
m2 = a bird in a cage
Run Code Online (Sandbox Code Playgroud)

这两条消息中某些 n 元语法的频率:

'a' = 4
'in a cage' = 2
'a bird' = 1
'a cat' = 1
...
Run Code Online (Sandbox Code Playgroud)

请注意,由于in = 2、 、in a = 2a cage = 2是 和 的子集in a cage = 2,并且具有相同的频率,因此不应列出它们。只取最长的、频率最高的;遵循以下条件:最长的 sn-gram 最多由 8 个单词组成,总字符数低于 30。如果 n-gram 超过此限制,则可以将其分解为两个或多个 n-gram 并单独列出。 …

javascript algorithm substring string-matching

5
推荐指数
1
解决办法
933
查看次数

加快"最接近"的字符串匹配算法

我目前正在处理一个非常大的位置数据库,并试图将它们与它们的真实世界坐标相匹配.

为此,我下载包含大量条目的geoname数据集.它给出了可能的名称和纬度/经度坐标.为了尝试加快这个过程,我设法通过删除对我的数据集没有意义的条目,将巨大的csv文件(1.6 GB)减少到0.450 GB.它仍然包含400万个条目.

现在我有很多条目,例如:

  1. 上周我在挪威尤通黑门山的露营地看到了Slettmarkmountains山脉
  2. 冒险在神仙的幽谷,斯凯岛,苏格兰,英国
  3. 早上在移民荒野,加利福尼亚州

知道字符串匹配这么长的字符串,我通过NLTK 使用Standford的NER来获得更好的字符串来限定我的位置.现在我有类似的字符串:

  1. Slettmarkmountains Jotunheimen挪威
  2. 童话幽谷斯凯岛苏格兰英国
  3. 移民荒野加州
  4. 优胜美地国家公园
  5. 半圆顶约塞米蒂国家公园

geoname数据集包含以下内容:

  1. Jotunheimen挪威Lat Long
  2. Slettmarkmountains Jotunheimen挪威Lat Long
  3. 布莱斯峡谷拉特龙
  4. Half Dome Lat Long
  5. ...

我正在应用这个算法来获得我的条目和包含4M条目的geoname csv之间的良好匹配.我首先阅读geoname_cleaned.csv文件并将所有数据放入列表中.对于我有的每个条目,我然后string_similarity()在当前条目和geoname_list的所有条目之间调用我的每个条目

def get_bigrams(string):
    """
    Take a string and return a list of bigrams.
    """
    s = string.lower()
    return [s[i:i+2] for i in list(range(len(s) - 1))]

def string_similarity(str1, str2):
    """
    Perform bigram comparison between two strings
    and return a percentage match in …
Run Code Online (Sandbox Code Playgroud)

python language-agnostic algorithm performance string-matching

5
推荐指数
1
解决办法
873
查看次数

R 中大数据高效字符串匹配(和索引)的技巧?

我想做的事

我有许多唯一的 ID,例如id1, id2, etc.。它们出现在多个组中,每个组都是 1 到 100 个 id 之间的随机样本,例如

[1] "id872- id103- id746-"                             
[2] "id830- id582-"                                   
[3] "id663- id403- id675- id584- id866- id399- id28- id550-"
Run Code Online (Sandbox Code Playgroud)

我想找到一个id所属的所有组,例如id1

groups.with.id[1] = grep("id1-", groups)
Run Code Online (Sandbox Code Playgroud)

我的问题

数据量很大(80k id,1M 个组),在我的笔记本电脑上大约需要12 个小时。我认为这是我正在执行 80k 次(每个 id 一次)以及每次访问一个巨大对象(1M 组)的事实的组合。

有什么办法可以提高效率吗?

(我经常遇到 REg 中较大对象的问题,重复索引具有 >10k 行的数据帧会变得非常慢。也赞赏大型对象的有效索引的一般答案!

示例代码

# make toy dataset
n.ids = 80000 # number of unique ids
n.groups = 100 # number of groupings

# make data
ids = …
Run Code Online (Sandbox Code Playgroud)

string r string-matching processing-efficiency large-data

5
推荐指数
1
解决办法
278
查看次数